什麼是二叉排序樹
二叉排序樹中的每乙個節點,其值大於左子樹的所有節點的值,小於右子樹所有節點的值。
【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 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。查詢二叉搜尋樹 遞...