二叉樹搜尋實現
from random import randint
class
node
:def
__init__
(self, val)
:# initialize the node
self.value = val
self.leftchild =
none
self.rightchild =
none
definsert
(self, data)
:# 完成 樹 類中新增元素的任務,二叉樹,左邊比結點小,右邊比結點大
if self.value == data:
return
false
elif self.value > data:
if self.leftchild:
return self.leftchild.insert(data)
else
: self.leftchild = node(data)
return
true
else
:if self.rightchild:
return self.rightchild.insert(data)
else
: self.rightchild = node(data)
return
true
deffind
(self, data)
:# 二叉樹查詢值
if self.vale == data:
return
true
elif self.value > data:
if self.leftchild:
return self.leftchild.find(data)
else
:return
false
else
:if self.rightchild:
return self.rightchild.find(data)
else
:return
false
return
false
# 前序遍歷
defpreorder
(self)
:if self:
# 先結點 再 左 最後 右
print
(str
(self.value)
)if self.leftchild:
self.leftchild.preorder(
)if self.rightchild:
self.rightchild.preorder(
)# 後序遍歷
defpostorder
(self)
:if self:
# 先左再右 後結點
if self.leftchild:
self.leftchild.postorder(
)if self.rightchild:
self.rightchild.postorder(
)print
(str
(self.value)
)# 順序遍歷
definorder
(self)
:if self:
# 先左 再結點 最後 右
if self.leftchild:
self.leftchild.inorder(
)print
(str
(self.value)
)if self.rightchild:
self.rightchild.inorder(
)class
tree
:def
__init__
(self)
: self.root =
none
definsert
(self, data)
:# 建立二叉樹
if self.root:
return self.root.insert(data)
else
: self.root = node(data)
return
true
deffind
(self, data)
:# 查詢二叉樹
if self.root:
return self.root.find(data)
else
:return
false
# 前序遍歷
defpreorder
(self)
:print
("** preorder **"
) self.root.preorder(
)# 後序遍歷
defpostorder
(self)
:print
("** postorder **"
) self.root.postorder(
)# 順序遍歷
definorder
(self)
:print
('** inorder **'
) self.root.inorder(
)if __name__ ==
'__main__'
:# 實現 二叉樹
bst = tree(
) res =
# bst.insert(10)
# print(bst.insert(15))
for i in
range(10
):num =
int(randint(1,
20)) bst.insert(num)
print
(res)
bst.preorder(
)print
('\n'
) bst.postorder(
)print
('\n'
) bst.inorder(
)
Python 二叉樹資料結構
二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 將二叉樹的節點定義為乙個物件,節點之間通過類似鍊錶的鏈結方式來連線。二叉樹的遍歷方式 前序遍歷 eacbdgf 中序遍歷 abcdegf 後序遍歷 bdcafge 層次遍...
資料結構 二叉樹 2 平衡二叉樹 3
前面分析了平衡二叉樹是怎麼調整平衡的,這裡就來解決另乙個問題,平衡二叉樹理論為什麼能成立?難道就不會有怎麼調都不會平衡的情況嗎?一起 一下吧。我在很早的時候就注意到了乙個問題。上圖中是一顆不平衡的二叉樹向平衡調整的一部分過程,這個過程中我發現,子樹a,b,c,d的左右關係始終都是不變的,就是從左到右...
重建二叉樹python 資料結構 重建二叉樹
說明 給定輸入一棵二叉樹的前序遍歷和中序遍歷陣列。利用此重新建立二叉樹。注意輸入不包含相同的鍵值,否則情況複雜得多。思路 由定義,前序遍歷的第乙個記錄總是根節點,而這個鍵值在中序遍歷時,將中序遍歷的陣列分成兩部分,分別對應這個根節點的左右兩子樹。同時,前序遍歷陣列跟在節點後的陣列也分成兩部分,其中前...