資料結構之二叉排序樹

2021-10-08 08:12:47 字數 3359 閱讀 9963

別名:二叉搜素樹,二叉查詢樹

線性結構的缺點

順序儲存

不排序: 查詢困難,只能通過線性查詢乙個乙個找

排序:刪除和插入操作困難

鏈式結構

無論排序還是不排序,查詢都十分麻煩

注:二叉排序樹(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 若右子樹不空,則右子樹上所有結點的值均大於或等於它...