二叉查詢樹:對於樹中的每個節點x,它的左子樹所有關鍵字小於x的關鍵字,而右子樹的所有關鍵字大於x的關鍵字。
二叉查詢樹的平均深度是o(logn)。
二叉查詢樹的刪除操作:
如果有乙個兒子,調節父節點指標繞過該節點後被刪除。
如果有兩個兒子,用右子樹的最小資料代替該節點的資料,並遞迴地刪除那個節點(現在它是空的)。因為右子樹的最小節點不可能有左兒子,所以第二次刪除更容易。
1#ifndef _tree_h23
struct
treenode;
4 typedef struct treenode *position;
5 typedef struct treenode *searchtree;67
searchtree makeempty(searchtree t);
8position find(elementtype x, searchtree t);
9position findmin(searchtree t);
10position findmax(searchtree t);
11searchtree insert(elementtype x, searchtree t);
12searcgtree delete(elementtype x, searchtree t);
13elementtype retrieve(position p);
1415
#endif
1617
struct
treenode
1823
2425
searchtree makeempty(searchtree t)
2633
return
null;34}
3536
37position find(elementtype x, searchtree t)
3848
4950
position findmin(searchtree t)
5159
60position findmax(searchtree t)
6167
6869
searchtree insert(elementtype x, searchtree t)
7081}82
else
if (x < t->element)
83 t->left = insert(x, t->left);
84else
85 t->right = insert(x, t->right);
8687
return
t;88}89
9091
searchtree delete(elementtype x, searchtree t)
92110
//one or zero children
111else
112120
121return
t;122 }
二叉排序樹(二叉查詢樹)的基本操作
二叉排序樹的查詢屬於動態查詢的範疇,根據查詢過程中是否對錶進行修改,可以把查詢分為靜態查詢和動態查詢。動態查詢表的特點是 表結構本身是在查詢過程中動態生成的,即對於給定的key值,若表中存在其關鍵字等於key的記錄,則查詢成功並返回,否則插入關鍵字等於key的記錄。二叉排序樹或者是一顆空樹,或者是具...
二叉樹的性質以及二叉查詢樹的基本操作
樹 tree 是n n 0 個結點的有限集。在任意一棵非空樹中 1 有且僅有乙個特定的被稱為根 root 的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹 subtree 度 結點擁有的子樹數稱為結點的度 degre...
二叉查詢樹的基本操作C 實現
最近在看胡凡的 演算法筆記 將其中的內容理解了一下,然後進行實現 include using namespace std class node 二叉查詢樹的查詢 void search node root,int x if root data x else if root data x else 二...