樹由node物件組成,每個物件有一對鍵值、兩條鏈結和乙個節點計數器n。每個node物件都是一棵含有n個節點的子樹的根節點,它的左鏈結指向一棵由小於該節點的所有鍵組成的二叉查詢樹,右鏈結指向一棵由大於該節點的所有鍵組成的二叉查詢樹。在bst類中,還應定義乙個node物件root,指向當前二叉樹的根節點。
public class bst, value>
} private node root; //二叉查詢樹的根節點
這兩個操作較為簡單,直接看**:
public void put(key key, value value)
private node put(node x, key key, value value)
public value get(key key)
private value get(node x, key key)
在這裡都是定義了乙個公有方法和乙個私有方法來實現乙個操作,且都是用遞迴實現操作的,要注意節點數量要記得更改。
如果根節點的左鏈結為空,那麼一棵二叉查詢樹中最小的鍵就是根節點;如果左鏈結非空,則樹中最小鍵就是左子樹中的最小鍵。同理,最大鍵也是類似。
select操作時找到鍵排名為k的節點,rank操作則相反,是找到某個鍵的排名。
刪除最小鍵:
同理,刪除最大鍵也是類似。
public void deletemin()
private node deletemin(node x)
public void deletemax()
private node deletemax(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 class bst, value>
} private node root; //二叉查詢樹的根節點
private int size(node x)
public int size()
public void put(key key, value value)
private node put(node x, key key, value value)
public value get(key key)
private value get(node x, key key)
public key min()
private node min(node x)
public key max()
private node max(node x)
public key select(int k)
private node select(node x, int k)
public int rank(key key)
private int rank(node x, key key)
public void deletemin()
private node deletemin(node x)
public void deletemax()
private node deletemax(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 static void main(string args)
}
二叉查詢樹 BST
當所有的靜態查詢結構新增和刪除乙個資料的時候,整個結構都需要重建。這對於常常需要在查詢過程中動態改變資料而言,是災難性的。因此人們就必須去尋找高效的動態查詢結構,我們在這討論乙個非常常用的動態查詢樹 二叉查詢樹。二叉查詢樹的特點 下面的圖就是兩棵二叉查詢樹,我們可以總結一下他的特點 1 若它的左子樹...
二叉查詢樹(BST)
二叉查詢樹,也稱為二叉排序樹,二叉搜尋樹。二叉查詢樹結合了鍊錶插入的靈活性和有序陣列查詢 二分查詢 的高效性。用二叉查詢樹實現有序符號表的api。public class bst,value 有序符號表的相關方法 public intsize private intsize node x publi...
二叉查詢樹BST
binary search tree bst是一棵資料域有序的樹,其左子樹上的所有結點的資料域均小於或等於根結點的資料域,右子樹上所有結點的資料域均大於根結點的資料域,即其中序遍歷是有序的。二叉查詢樹的基本操作 1.查詢操作 和普通二叉樹的查詢不同,二叉查詢樹可根據資料域的比較對左右子樹選擇遞迴 v...