1 #include23using
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,所以要先找到插入位置,且插入的位置一定是在葉子節點的下面 所以插入分兩個步驟 ...