別名:二叉搜素樹,二叉查詢樹
線性結構的缺點
順序儲存
不排序: 查詢困難,只能通過線性查詢乙個乙個找
排序:刪除和插入操作困難
鏈式結構
無論排序還是不排序,查詢都十分麻煩
注:二叉排序樹(bst) 可以解決上述的問題
對於乙個二叉樹中的任意乙個非葉子節點,要求左子節點比當前節點小,右子節點比當前節點大
注:空樹也可看成二叉排序樹
陣列:構成二叉排序樹
中序遍歷結果:1,3,5,7,9,10,12
注:二叉排序樹的中序遍歷可以形成乙個排序好的公升序陣列
package tree.binarysorttree;
public
class
treenode
//增加節點
//如果節點的權大於當前節點則為右節點,小則為左節點
public
void
add(treenode node)
if(node.value<
this
.value)
else
}else
else}}
//中序遍歷
public
void
midshow
(treenode node)
midshow
(node.leftnode)
; system.out.
println
(node.value)
;midshow
(node.rightnode);}
}
public
class
binarysorttree
else
}//中序遍歷
public
static
void
midshow()
}
//treenode中的方法
public treenode searchnode
(int value)
//比當前值大,去右子樹查詢
else
if(value>
this
.value)
return
this
.rightnode.
searchnode
(value);}
//比當前值小,去左子樹查詢
else
return
this
.leftnode.
searchnode
(value);}
}//binarysorttree中的方法
//查詢節點
1.刪除葉子節點直接將指向他的指標置為空
2.刪除的節點有乙個子節點
將指向他的指標指向子節點
3.刪除的節點有兩個子節點
第一種情況:
先找到刪除節點的右子樹中最小的值,然後用最小的值去替換掉被刪除的值
**例如:**刪除節點7,就直接用節點9去代替他
第二種情況:
先找到刪除節點的右子樹中最小的值,然後用最小的值去替換掉被刪除的值,如果最小值存在右子節點,那麼就用右子節點去替代9原來的位位置
例如:
刪除節點7,就用9去代替7的位置,用10去代替9的位置
//binarysorttree中的方法
//刪除節點
public
static
void
deletenode
(int value)
root.
deletenode
(value);}
//treenode中的方法
public
void
deletenode
(int value)
//要刪除的是葉子節點
if(target.leftnode == null && target.rightnode == null)
//要刪除是父節點的右子節點
else
}//要刪除的節點有兩個子節點
else
if(target.leftnode != null && target.rightnode != null)
//要刪除的節點有乙個子節點
else
//被刪節點有右子節點
else
}//要刪除的節點是父節點的右子節點
else
//被刪節點有右子節點
else}}
}//尋找需要刪除節點的右子樹中的最小節點
public treenode searminnode
(treenode rightnode)
//對最小節點進行處理,分為無子節點和有右子節點兩種情況
deletenode
(target.value)
;return target;
}//尋找需要刪除節點的父節點
public treenode searchfathernode
(int value)
else
if(value<
this
.value)
return
this
.leftnode.
searchfathernode
(value);}
else
return
this
.rightnode.
searchfathernode
(value);}
}
資料結構之二叉排序樹
二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2 若右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3 左 右子樹也分別為二叉排序樹 4 沒有鍵值相等的節點。以下只建立並先序列印出二叉排序樹 include include...
資料結構之二叉排序樹
二叉排序樹 bst binary sort search tree 對於二叉排序樹的任何乙個非葉子節點,要求左子節點的值比當前節點的值小,右子節點的值比當前節點的值大。特別說明 如果有相同的值,可以將該節點放在左子節點或右子節點 比如針對前面的資料 7,3,10,12,5,1,9 對應的二叉排序樹為...
資料結構之二叉排序樹
1.什麼是二叉排序樹?二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。它或者是一棵空樹 或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於或等於它...