二叉查詢數

2021-09-23 05:58:11 字數 1162 閱讀 9377

二叉查詢樹,或者是一顆空樹,具備以下性質得二叉樹:

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