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...