二叉排序樹,又稱為二叉查詢樹或者二叉搜尋樹.二叉查詢樹為滿足以下條件的樹:
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 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。查詢二叉搜尋樹 遞...