二叉排序樹 BST

2021-10-02 17:09:56 字數 2164 閱讀 3330

二叉排序樹,又稱為二叉查詢樹或者二叉搜尋樹.二叉查詢樹為滿足以下條件的樹:

1,若左子樹不為空,則左子樹上所有結點的值均小於根結點的值;

2,若右子樹不為空,則右子樹上所有結點的值均大於根結點的值;

3,它的左右子樹也分為二叉排序樹;

插入操作

將待插入的新結點與當前結點進行比較,如果兩個結點的值相同,則表示新結點已經存在於二叉樹中,直接返回fales.

將待插入的新結點與當前結點進行比較,如果待插入的新結點的值小於當前結點,則在當前結點的左子樹中尋找,知道左子樹為空,則當前結點為要找到的父結點,將新結點插入當前結點的左子樹即可.

將待插入的新結點與當前結點進行比較,如果待插入的新結點的值要大於當前結點的值,則在當前的右子樹中尋找,直到右子樹為空,則表示當前結點為要找到的父結點,將新結點插入當前結點的右子樹即可.

實現

public

void

insretbst

(int key,node root)

else

if(key>p.

getvalue()

)else

}//prev 是待插入結點的結點,根據結點的大小,被插入相應的位置

if(root == null)

else

if(key

getvalue()

)else

}

刪除操作

二叉樹的刪除操作主要分為三種情況:待刪除的結點沒有子結點;待刪除的結點只有乙個子結點;待刪除的結點有兩個子結點.

在待刪除的結點沒有子結點時,直接刪除該結點,即在其父結點中將其對應的子結點置空即可.

在待刪除的結點只有乙個子結點時,使用子結點替換當前結點,然後刪除該結點即可.

在待刪除的結點有兩個子結點時,首先查詢該結點的替換結點(替換結點

為左子樹中最大結點或者右子樹中的最小結點),然後替換待刪除的結點,最後刪除替換結點.

實現

public

void

deletebst

(int key)

private

boolean

deletebst

(node node,

int key)

else

else

if(key

getvalue()

)else}}

private

boolean

delete

(node node)

else

if(node.

getleft()

==null)

else

node.

setvalue

(s.getvalue()

);if(temp!=node)

else

}return

true

;}

查詢操作

二叉排序樹的查詢方式和效率接近二分查詢法,因此可以很容易獲取最大(最右最深子結點)值和最小(最左最深子結點)值,具體的查詢流程為:將要查詢照的資料與根節點的值進行比較,如果相等就返回,如果小於就到左子樹中遞迴查詢,如果大於就到右子樹中遞迴查詢.

實現

public

boolean

searchbst

(int key,node root)

else

if(key

getvalue()

)else

}return

false

;}

二叉排序樹BST

二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。二叉排序樹的性質 左子樹上所有結點的值均小於或等於它的根結點的值 右子樹上所有結點的值均大於或等於它的根結點的值 左 右子樹也分別為二叉排序樹 如圖是乙個bst。有了這種性質,bst的...

二叉排序樹 BST

二叉排序樹,又叫二叉查詢樹,它或者是一棵空樹 或者是具有以下性質的二叉樹 1.若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2.若它的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3.它的左右子樹也分別為二叉排序樹。1.1 排序二叉樹之插入操作 已知乙個關鍵字值為key的結...

BST(二叉排序樹)

二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。查詢二叉搜尋樹 遞...