資料結構之二叉排序樹陣列,鍊錶實現

2022-03-29 08:37:55 字數 2371 閱讀 4325

1 鍊錶

#include 

<

stdio.h

>

#include

<

malloc.h

>

typedef

struct

node

node;

void

init(node *t)

node

*insert(node

*t ,

intkey)

else

return

t;

//important!

}node

*creat(node *t)

returnt;}

void

inorder(node

*t)

//中序遍歷輸出

}int

main()

2 陣列

#include 

<

stdio.h

>

#include

<

string

.h>

#define

n 1000

intl[n], r[n], key[n], flag, root;

void

insert(

intindex,

intx)

else

}void

inorder(

intindex)

intmain()

}inorder(root);

return0;

}

二叉排序樹的刪除操作

有3種方式:

#include 

<

stdio.h

>

#include

<

malloc.h

>

#include

<

iostream

>

using

namespace

::std;

typedef

struct

node

node;

void

init(node *t)

node

*insert(node

*t ,

intkey)

else

return

t;

//important!

}node

*creat(node *t)

returnt;}

void

inorder(node

*t)

//中序遍歷輸出}//

1.完成節點的刪除操作

node

*deletenode1(node *t)

//如果r不是t的左孩子

//將r的左孩子作為r的父親節點prer的右孩子

if(prer

!=r)

////被刪結點t的右子樹作為r的右子樹

r->

rchild =t

->

rchild;

free(t);

returnr;}

//若t沒有左子樹,直接用t的右孩子取代它

else}//

2.完成節點的刪除操作

node

*deletenode2(node *t)

r->

rchild =t

->

rchild;

node *q

=t->

lchild;

free(t);

returnq;}

else}//

3.1.完成節點的刪除操作

//基本上與第一種情況類似,之不過這次不進行節點指標的移動,而是刪

//除「值」

node

*deletenode3(node *t)

t->

data =r

->

data;

if(prer

!=r)

else

free(r);

returnt;}

//若t沒有左子樹,直接用t的右孩子取代它

else}//

遞迴操作,尋找x的合適位置,主要是呼叫deletenode()函式

node

*delete(node *t,

intx)

returnt;}

intmain()

參考:

資料結構之二叉排序樹

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2 若右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3 左 右子樹也分別為二叉排序樹 4 沒有鍵值相等的節點。以下只建立並先序列印出二叉排序樹 include include...

資料結構之二叉排序樹

二叉排序樹 bst binary sort search tree 對於二叉排序樹的任何乙個非葉子節點,要求左子節點的值比當前節點的值小,右子節點的值比當前節點的值大。特別說明 如果有相同的值,可以將該節點放在左子節點或右子節點 比如針對前面的資料 7,3,10,12,5,1,9 對應的二叉排序樹為...

資料結構之二叉排序樹

別名 二叉搜素樹,二叉查詢樹 線性結構的缺點 順序儲存 不排序 查詢困難,只能通過線性查詢乙個乙個找 排序 刪除和插入操作困難 鏈式結構 無論排序還是不排序,查詢都十分麻煩 注 二叉排序樹 bst 可以解決上述的問題 對於乙個二叉樹中的任意乙個非葉子節點,要求左子節點比當前節點小,右子節點比當前節點...