binarysearchtree.h
1#ifndef _binarysearchtree_h
2#define _binarysearchtree_h
34#include
5#include
6 using namespace std;
78 template
9 class bst;
1011 template
12 class bstnode //二叉樹結點類
13 //建構函式
20 bstnode(const e d,bstnode
*l =
null,bstnode
*r =
null):data(d),left(l),right(r)
21 {} //建構函式
22 ~bstnode() //析構函式
23 {}
24void setnode(e d) //修改
25
28 e getdata() //提取
29
32 };
3334 template
35 class bst //二叉搜尋樹定義
36 52 bst(k value); //建構函式
53 ~bst() //析構函式
54 {}
55 bool search(const k x)const //搜尋
56
59 bst& operator = (const bst& r); //賦值
60void makeempty() //置空
61
65void printtree()const //輸出
66
69 e min() //求最小
70
73 e max() //求最大
74
77 bool insert(const e& el) //插入新元素
78
81 bool remove(const k x) //刪除含x的結點
82
85 };
8687
8889 template
90 bool bst
::insert(const e& el,bstnode
*& ptr) //在以ptr為根的二叉搜尋樹中插入el的結點,若在》 樹中已經含有el的結點,則不插入
91 100
return
true;
101 }
102else
if(el < ptr->
data) //左子樹插入
103 insert(el,ptr->left);
104else
if(el > ptr->
data) //右子樹插入
105 insert(el,ptr->right);
106else
107return
false;
108 }
109110 template
111 bst
::bst(k value) //輸入乙個元素序列,建立一棵二叉搜尋樹
112
123 }
124125 template
126void bst
::printtree(bstnode
*ptr)const //列印二叉樹
127
134 }
135136 template
137 bstnode* bst
::search(const k x,bstnode
*ptr) //私有遞迴函式,災異ptr為根的二叉搜尋》 樹中搜尋含x的結點,若找到,則函式返回該結點的位址,否則函式返回null值
138
148149 template
150 bool bst
::remove(const k x,bstnode
*&ptr) //在以ptr為根的二叉樹中刪除含根x的結點,若刪除成功
則新根通過ptr返回
151
167else
//要刪除的結點只有乙個子女或者沒有子女
168
177 }
178return
false;
179 }
180181
#endif
測試**如下:
1
#include"./binarysearchtree.h"
4int main()
5
如果有問題的話,希望有人指出,共同進步。 二叉樹BST的實現
二叉樹bst的實現 01 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 02 任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 03 任意節點的左 右子樹也分別為二叉查詢樹。04 沒有鍵值相等的節點 no duplicate nodes 1.遍歷 public ...
線索二叉樹
當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...
線索二叉樹
1.線索二叉樹結構和操作定義 threadbintree.h 功能 線索標誌域所有值 typedef enumnodeflag 功能 線索二叉樹結構體 typedef struct threadtreethreadbintree 前驅節點指標 threadbintree previous null ...