本文將會介紹一種能夠將鍊錶插入的靈活性和有序陣列查詢的高效性結合在一起的符號表實現。
定義
一顆二叉查詢樹(bst)是一顆二叉樹,其中每個結點都含有乙個comparable的鍵(以及相關聯的值)且每個結點的鍵都大於其左子樹的任意結點的鍵而小於任意右結點的鍵。
其實現**如下(採用泛型編寫):
public
class bst,value>//構造方法
}//求二叉樹大小
public
intsize()
private
intsize(node x)
//二叉樹查詢
public value get(key key)
private value get(node x,key key)
//二叉樹插入
public
void
put(key key,value val)
private node put(node x,key key,value val)
//尋找最小鍵
public key min()
private node min(node x)
//取整
public key floor(key key)
private node floor(node x,key key)
//返回小於key值的鍵的數量
public
intrank(key key)
private
intrank(key key,node x)
//刪除最小結點
public
void
deletemin()
private node deletemin(node x)
//刪除操作,刪除結點之後,使用右子樹中的最小結點填補
public
void
delete(key key)
public node delete(node x,key key)
x.n = size(x.left) + size(x.right) + 1;
return x;
}}
其中使用了很多遞迴,遞迴與非遞迴的區別是,遞迴的實現更容易驗證其正確性,而非遞迴的實現效率更高。
二叉查詢樹的效率取決於樹的高度,樹的高度決定了演算法在最壞情況下的效能,因此還可以對其進行優化為平衡二叉樹,它能保證在無論鍵的插入順序如何,樹的高度都是總鍵數的對數。
二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...
二叉樹 二叉查詢樹
二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...
樹(樹,二叉樹,二叉查詢樹)
1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...