Python 資料結構2 二叉樹 搜尋

2021-10-04 06:31:30 字數 3134 閱讀 8888

二叉樹搜尋實現

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 資料結構 重建二叉樹

說明 給定輸入一棵二叉樹的前序遍歷和中序遍歷陣列。利用此重新建立二叉樹。注意輸入不包含相同的鍵值,否則情況複雜得多。思路 由定義,前序遍歷的第乙個記錄總是根節點,而這個鍵值在中序遍歷時,將中序遍歷的陣列分成兩部分,分別對應這個根節點的左右兩子樹。同時,前序遍歷陣列跟在節點後的陣列也分成兩部分,其中前...