通過對慕課網bobo老師講解的二分搜尋樹的總結 玩轉資料結構* 二分搜尋樹的前序遍歷
* @param node
*/private
void
preorder
(node node)
system.out.
println
(node.e)
;preorder
(node.left)
;preorder
(node.right)
;}
可以看出就是訪問元素的位置不同.。同理後序遍歷/**
* 二分搜尋樹的前序遍歷
* @param node
*/private
void
preorder
(node node)
preorder
(node.left)
; system.out.
println
(node.e)
;preorder
(node.right)
;}
/**
* 二分搜尋樹的後序遍歷
通過使用佇列的方式,先進先出實現層序遍歷
/**
* 二分搜尋樹的層序遍歷
*/public
void
levelorder()
if(cur.right != null)
}}
public t searchmin()
return
searchmin
(root)
.e;//node物件中 e為泛型, root為根節點
}/**
* 查詢二分搜尋樹最小元素
* @param node node不為空
* @return
*/private node searchmin
(node node)
return
searchmin
(node.left);}
public t removemin()
/** * 刪除最小二分搜尋樹元素
* @param node
* @return
*/private node removemin
(node node)
node.left =
removemin
(node.left)
;return node;
}
同上,對稱就行刪除只有左或者右子節點的元素時,用上面的邏輯,然而刪除有左右子節點的元素時,可以利用當前節點的右子節點裡面的最小元素進行替換當前節點 或者 最小元素重新連線當前節點左右子節點。 同理,也可以使用當前節點的左子節點裡面的最大元素!public
void
deleteelement
(t e)
/** * 刪除二分搜尋樹的元素
* @param node
* @param e
* @return
*/private node deleteelement
(node node, t e)
if(node.e.
compareto
(e)>0)
else
if(node.e.
compareto
(e)<0)
if(node.left == null)
if(node.right == null)
//(1)左右不為空時,找到右節點最小節點,然後連線node節點左右子節點
node min =
searchmin
(node.right)
;//查詢最小元素方法
min.right =
removemin
(node.right)
;//呼叫刪除最小元素方法
min.left = node.left;
node.left = node.right = null;
return min;
//(2)左右不為空時,找到右節點最小節點,替換當前節點元素
// node min = searchmin(node.right);//查詢最小元素方法
// node.right = removemin(node.right);//呼叫刪除最小元素方法
// node.e = min.e;
// return node;
}
二分搜尋樹
1.二分搜尋樹 binary search tree 性質 a.二分搜尋樹是二叉樹 b.二分搜尋樹的每乙個節點的值 大於其左子樹的所有節點的值 小於其右子樹的所有節點的值 c.每一顆子樹也是二分搜尋樹 e.儲存的元素必須具有可比較性 二分搜尋樹的乙個缺點 2.二分搜尋樹的操作 a.二分搜尋樹新增新元...
二分搜尋樹
include include include include include using namespace std templateclass bst bst int size bool isempty 插入結點 void insert key key,value value 是否包含該鍵值的結...
二分搜尋樹
template class bst node root intcount public bst bst intsize bool isempty 插入新的節點 public void insert key key,value value private 向以node為根的二叉搜尋樹中,插入節點 k...