二叉排序樹(BST)筆記

2021-10-08 07:18:46 字數 2679 閱讀 5201

什麼是二叉排序樹

二叉排序樹中的每乙個節點,其值大於左子樹的所有節點的值,小於右子樹所有節點的值。

【7,3,10,12,5,1,9,2】陣列組成的bst

二叉排序樹的查詢效率很高,下面是一些關於二叉排序樹實現的方法。

節點資訊

class

node

public

void

setval

(int val)

public

node

(int val)

//構建二叉排序樹,新增節點

public

void

addnode

(node node)

else

}else

else}}

}

根據addnote方法可以很清楚的構造出一顆bst。this剛開始所指的為根節點。

bst類中的addnote方法

public

class

bst root.

addnode

(node);}

}

bst中刪除節點方法比較麻煩,需要額外新增幾個方法。

在note類中新增如下兩個方法

searchdel方法和查詢某個節點方法是一樣的,所以就不重複寫查詢節點的方法了。

/**

* 找到刪除的節點

* @param val

* @return

*/public node searchdel

(int val)

else

if(val <

this

.val)

else

return del;

}/**

* 找到要刪除節點的父節點

* @param val

* @return

*/public node searchpar

(int val)

else

else

if(val >=

this

.val &&

this

.right != null)

else

}return par;

}

同理在bst類中也應該加上這兩個方法。

public node searchdel

(int val)

public node searchpar

(int val)

刪除節點刪除節點的邏輯比較麻煩,需要考慮下面幾個情況

被刪的節點是葉子節點

被刪除的節點下面有一顆子樹

被刪除的節點下面有兩顆子樹

第一種情況比較簡單,明確此節點是其父節點的左還是右節點,然後直接置空即可。

第二種情況需要判斷下面的子樹是被刪節點的左還是右節點,還需要判斷被刪節點是其父節點的左還是右節點。另外還有一種特殊情況:如果被刪的節點沒有父節點,即只剩下兩個節點的情況時,則直接把root指向另乙個節點。所以一共時5中情況。

第三種情況邏輯也比較簡單,先找到被刪節點,然後找其右子樹中最小的節點。如上圖中要刪除7節點,則找到9節點,把7節點的值賦為9,然後刪除9節點。

public

void

delnode

(int val)

node parent =

searchpar

(val)

;//要刪除的是葉子節點

if(target.left == null && target.right == null)

else

//要刪除的節點下有兩顆子樹

}else

if(target.left != null && target.right != null)

int min = temp.

getval()

;delnode

(temp.

getval()

);target.

setval

(min);}

else

//要刪除的節點有左子樹且節點本身是父節點的左子節點

if(target.left != null && target.

getval()

== parent.left.

getval()

)else

if(target.right != null && target.

getval()

== parent.left.

getval()

)else

if(target.left != null && target.

getval()

== parent.right.

getval()

)else

}}

二叉排序樹BST

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

二叉排序樹 BST

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

BST(二叉排序樹)

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