二叉查詢樹,或者是一顆空樹,具備以下性質得二叉樹:
1,若它的左子樹不空,則其左子樹上的所有結點的值均小於它根結點的值;
2,若它的右子樹不空,則其右子樹上的所有結點的值均大於它根結點的值;
3,它的左、右子樹也分別為二叉查詢樹
具體如下圖:
查詢操作:
在二叉查詢樹中查詢x的過程如下:
1、若二叉樹是空樹,則查詢失敗。
2、若x等於根結點的資料,則查詢成功,否則。
3,若x小於根結點的資料,則遞迴查詢其左子樹,否則。
4,遞迴查詢其右子樹。
插入操作:
二叉樹查詢樹b插入操作x的過程如下:
1、若b是空樹,則直接將插入的結點作為根結點插入。
2、x等於b的根結點的資料的值,則直接返回,否則。
3、若x小於b的根結點的資料的值,則將x要插入的結點的位置改變為b的左子樹,否則。
4,將x要出入的結點的位置改變為b的右子樹。
刪除操作:
於二叉查詢樹的刪除操作(這裡根據值刪除,而非結點)分三種情況:
1、如果結點為葉子結點(沒有左、右子樹),此時刪除該結點不會玻化樹的結構,直接刪除即可,並修改其父結點指向它的引用為null.如下圖:
2、如果其結點只包含左子樹,或者右子樹的話,此時直接刪除該結點,並將其左子樹或者右子樹設定為其父結點的左子樹或者右子樹即可,此操作不會破壞樹結構。如下圖:
3、 當結點的左右子樹都不空的時候,一般的刪除策略是用其右子樹的最小資料,代替要刪除的結點資料並遞迴刪除該結點(此時為null),因為右子樹的最小結點不可能有左孩子,所以第二次刪除較為容易。z的左子樹和右子樹均不空。找到z的後繼y,因為y一定沒有左子樹,所以可以刪除y,並讓y的父親節點成為y的右子樹的父親節點,並用y的值代替z的值.如圖:
不同的二叉查詢數
給出 n,問由 1.n 為節點組成的不同的二叉查詢樹有多少種?給出n 3,有5種不同形態的二叉查詢樹 二叉搜尋樹的乙個性質 左邊的數都比根小,右邊的數都比根大。由於二叉樹的節點是從1到n,所以我們如果確定根為i,則根左邊的數是1到i 1,根右邊的數是i 1到n。選取乙個結點為根,就把結點切成左右子樹...
二叉查詢數的C 實現
標頭檔案定義 include using namespace std template class binarysearchtree binarynode root void insert const type x,binarynode t const void remove const type ...
二叉數查詢指定結點
指定的節點用節點儲存的資料來代表,採用遞迴的方法先判斷當前節點是否是目標節點,若不是則依次查詢左子樹和右子樹 include include using namespace std typedef struct tr tre,tree stack st tree creat tree root,in...