二叉查詢樹,也稱為二叉排序樹,二叉搜尋樹。
二叉查詢樹結合了鍊錶插入的靈活性和有序陣列查詢(二分查詢)的高效性。
用二叉查詢樹實現有序符號表的api。
public
class bst, value>
}//有序符號表的相關方法
//...
//...
}
public
intsize()
private
intsize(node x)
public value get(key key)
/**
* 查詢操作
* 在以x為根的子樹中查詢鍵對應的值。
* 這裡採用遞迴方式。
*/private value get(node x, key key)
public
void
put(key key, value val)
/*** 插入操作
* 如果key存在於以x為根的子樹中,更新它的值。
* 如果key不存在,插入該鍵值對。
* 每查詢到乙個結點都要更新它的規模資訊和左(右)鏈結資訊。
* 這裡採用遞迴方式。
*/private node put(node x, key key, value val)
/**
* 查詢並返回排名為k的鍵(即樹中正好有k個小於它的鍵)
*/public key select(int k)
private node select(node x, int k)
/**
* 查詢並返回鍵為key的排名
*/public
intrank(key key)
private
intrank(node x, key key)
/**
* 返回最小的鍵
*/public key min()
private node min(node x)
/**
* 刪除最小節點
*/public
void
deletemin()
private node deletemin(node x)
public
void
delete(key key)
private node delete(node x, key key)
x.n = size(x.left) + size(x.right) + 1;
//更新當前結點的規模
return x;
}
/**
* 二叉查詢樹的範圍查詢
*/public iterablekeys()
public iterablekeys(key lo, key hi)
private
void
keys(node x, queuequeue, key lo, key hi)
二叉查詢樹 BST
當所有的靜態查詢結構新增和刪除乙個資料的時候,整個結構都需要重建。這對於常常需要在查詢過程中動態改變資料而言,是災難性的。因此人們就必須去尋找高效的動態查詢結構,我們在這討論乙個非常常用的動態查詢樹 二叉查詢樹。二叉查詢樹的特點 下面的圖就是兩棵二叉查詢樹,我們可以總結一下他的特點 1 若它的左子樹...
二叉查詢樹BST
樹由node物件組成,每個物件有一對鍵值 兩條鏈結和乙個節點計數器n。每個node物件都是一棵含有n個節點的子樹的根節點,它的左鏈結指向一棵由小於該節點的所有鍵組成的二叉查詢樹,右鏈結指向一棵由大於該節點的所有鍵組成的二叉查詢樹。在bst類中,還應定義乙個node物件root,指向當前二叉樹的根節點...
二叉查詢樹BST
binary search tree bst是一棵資料域有序的樹,其左子樹上的所有結點的資料域均小於或等於根結點的資料域,右子樹上所有結點的資料域均大於根結點的資料域,即其中序遍歷是有序的。二叉查詢樹的基本操作 1.查詢操作 和普通二叉樹的查詢不同,二叉查詢樹可根據資料域的比較對左右子樹選擇遞迴 v...