查詢二 二叉排序樹

2021-07-27 07:25:57 字數 2371 閱讀 2641

1)左子樹上所有結點的值均小於根結點的值;

2)右子樹上所有結點的值均大於根結點的值;

3)它的左、右子樹也都分別是二叉查詢樹。

查詢原理    若二叉查詢樹為空,則查詢不成功;否則

1)key值等於根結點,則查詢成功;

2)key值小於根結點,則繼續在左子樹上進行查詢;

3)key值大於根結點,則繼續在右子樹上進行查詢。

插入操作 二叉查詢樹進行中序遍歷得到的是乙個有序序列,所以二叉查詢樹實質上是乙個有序表。

如果查詢不成功,則用這個key值 與 parentnode儲存的最後乙個不為空的節點 進行對比。將key作 parentnode 的子節點

刪除操作 分三種情況。

1)無子節點,直接刪除。

2)只是左子節點,或右子節點,將該節點的子節點替換該節點

3)左右子節點都存在,前面提過(二叉查詢樹的中序遍歷是乙個有序序列),所以用該節點的前驅替換該節點。

如圖:假設要刪除節點48,執行程式的過程如下:

1、中序遍歷找到48的字首37,中序出來遍歷的數肯定不會再有右節點的。

2、將37的左節點36替換原37的位置。

3、將37的左節點修改為 key值的左節點(35。

4、再將37的右節點修改為 key值的右節點(51)。

5、將37替換48. 

* time: 上午9:01

* to change this template use file | settings | file templates.

*/class node

}public class binary

/*** 查詢

** @param key

* @param src

* @return

*/public boolean search(node key, node src)

/*** 插入

** @param key

*/public void insert(node key) else if (!search(key))

parentnode = parentnode.right;

} else if (parentnode.data > key.data)

parentnode = parentnode.left;}}

}}/*** 刪除

** @param key

*/public void delete(node key) else if (node.data < key.data) else if (node.data > key.data) }}

private void _delete(node keynode) else else if (keynode.left == null) else if (keynode.left != null && keynode.right != null)

node.parentnode.right = node.left;

if (node.left != null) node.left.parentnode = node.parentnode;

node.left = keynode.left;

keynode.left.parentnode = node;

node.right = keynode.right;

keynode.right.parentnode = node;

}if (keynode.data > keynode.parentnode.data) else if (keynode.data < keynode.parentnode.data) }}

/*** 中綴遍歷找印

** @param node

*/public void print(node node)

public static void main(string args)

}列印結果

29  35  36  37  48  49  50  51  56  58  62  73  88  93  99

刪除48後,列印:

29  35  36  37  49  50  51  56  58  62  73  88  93  99

刪除48和51後,列印:

29  35  36  37  49  50  56  58  62  73  88  93  99 

查詢 二叉排序樹

順序查詢 順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程是 從表中第乙個記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄 如果知道最後乙個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢不成功。順序查詢演算法實現 如下 順序...

查詢 二叉排序樹

動態查詢表 表結構本身是在查詢過程中動態生成的,即對於給定值key,若表中存在其關鍵值等於key的記錄,則查詢成功返回,否則插入關鍵字等於key的記錄。二叉排序樹或者是一顆空樹,或者是具有下列性質的二叉樹 1 若他的左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值。2 若它的右子樹不空,則右...

專案二 二叉樹排序樹中查詢的路徑

問題及 2015,煙台大學計算機與控制工程學院 完成日期 2015年12月6日 問題描述 設計乙個演算法,輸出在二叉排序中查詢時查詢某個關鍵字經過的路徑。include include define maxsize 100 typedef int keytype 定義關鍵字型別 typedef ch...