二叉搜尋樹的查詢 刪除 插入

2022-05-15 06:10:01 字數 1713 閱讀 2918

1 #include2

3using

namespace

std;45

//二叉搜尋樹

6 typedef struct

binode

7binode ,*bitree; //

這裡面的bitree前面有乙個星星,表示這種結構的指標型別

1314

//sousuo

15//

這裡的*t代表的是二叉排序樹,key表示的是要查詢的值 ,f是指向*t的雙親,p是指向查詢路線上的最後乙個節點

16int searchnum(bitree *t,bitree f, int key ,bitree *p) //

這裡的p一定要有指標或者引用,避免值傳遞

1723

else

if(key == (*t)->data)

2428

else

if (key > (*t)->data)

2933

else

3437}38

//插入操作

39int insertnum(bitree &t,int

key)

4047

else

4857

else

if(key > (*p)->data)

5861

else

6265

//然後整個做完之後,看起來似乎無懈可擊,但是這樣子完全不對的,涉及值傳遞和址傳遞的過程

66//

上面的函式介面部分應該寫上函式的值或者引用,因為輸出的結果要造成t在整個函式執行後,只得到改變

67//

我這裡為了方便,不更改下面的** 直接加了乙個引用68}

69}7071

72//

00刪除操作

7374

void delete(bitree *p)

7584

else

if( (*p)->rchild ==null)

8590

else

//這種情況兩個孩子都不能空了

91100

//這裡忘記了替換,找到刪除節點的 中序遍歷相鄰節點 要進行替換的。

101 (*p)->data = s->data ; //

這裡容易寫成(*p)=s ,為什麼不能這麼寫呢,因為這麼寫就改變了他的結構了,左右孩子都變了。

102//

下面就分兩種情況了,就是q有沒有移動,換言之就是刪除節點的左孩紙有沒有節點。

103//

這一步是已經完成了刪除,剩下刪除的節點左子樹的爛攤子要收拾

104if(q == (*p))

105108

else

109112

113free

(s);

114115

116}

117}

118119

int deletenum(bitree *t ,int

key)

120125

else

126131

else

if(key >(*t)->data )

132135

else

136139

}140

}141

142int

main()

143

注意事項:

二叉搜尋樹的插入,查詢,刪除

include using namespace std template class node 預設析構函式 templatenode node template node node t value template class bstree 預設析構 void buildbstree 建立二叉樹 ...

二叉搜尋樹的查詢 插入 刪除

coding utf 8 time 2020 9 23 15 56 author julyli file bst.py class bitreenode def init self,data self.data data self.lchild none self.rchild none self....

二叉搜尋樹的插入 刪除 查詢

1 若左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2 若右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3 左 右子樹也分別為二叉排序樹 4 沒有鍵值相等的節點 插入的資料之後要滿足二叉樹的性質1和2,所以要先找到插入位置,且插入的位置一定是在葉子節點的下面 所以插入分兩個步驟 ...