Python實現二叉排序樹的建立及各種遍歷

2021-10-22 14:41:28 字數 2876 閱讀 1954

嘗試用python實現樹的操作,避免了c/c++複雜的語法及格式,更便於專注理解演算法本身的含義。

**如下(可直接執行):

'''

tree=

'''def

createtree

(lis)

: tree =

dict()

#用字典儲存二叉排序樹

root = lis[0]

#設定根節點

for x in lis:

#遍歷節點列表

father=root #每次插入節點,需要從根節點開始尋找插入位置

tree[x]=[

none

,none

,none

]#構造乙個新節點

flag=

false

#用於標識是否成功將節點插入二叉排序樹中

while flag==

false

:#迴圈尋找插入位置,插入成功後退出該迴圈

if x==father:

#遍歷尋找時第乙個元素x會即father,此時直接退出迴圈

break

elif

int(x)

<

int(father)

:#當節點值小於父節點時,向左孩子節點尋找

if tree[father][1

]==none

:#如果父節點沒有左孩子,則該節點插入此處

tree[father][1

]=xtree[x][0

]=father

flag=

true

elif tree[father][1

]!=none

:#如果父節點存在左孩子,將其左孩子更新為父節點

father =tree[father][1

]elif

int(x)

>

int(father)

:#當節點值大於父節點時,向右孩子尋找

if tree[father][2

]==none

:#若父節點沒有右孩子,則該節點插入此處

tree[father][2

]= x

tree[x][0

]= father

flag =

true

elif tree[father][2

]!=none

:#若父節點存在右孩子,將其右孩子更新為父節點

father=tree[father][2

]return tree

defpreorder

(ver)

:if ver!=

none

:print

(ver, end=

' ')

preorder(tree[ver][1

])preorder(tree[ver][2

])definorder

(ver)

:if ver!=

none

: inorder(tree[ver][1

])print

(ver, end=

' ')

inorder(tree[ver][2

])defpostorder

(ver)

:if ver!=

none

: postorder(tree[ver][1

])postorder(tree[ver][2

])print

(ver, end=

' ')

defbfs

(ver)

: queue=

[ver]

while

len(queue)

>0:

if tree[queue[0]

][1]

!=none:0

]][1

])if tree[queue[0]

][2]

!=none:0

]][2

])print

(queue[0]

,end=

' ')

queue.pop(0)

lis =

input()

.split(

)tree = createtree(lis)

for key in tree.keys():

if tree[key][0

]==none

: root=key

break

print

("here is pre:"

)preorder(root)

print

("\nhere is in:"

)inorder(root)

print

("\nhere is post:"

)postorder(root)

print

("\nhere is bfs:"

)bfs(root)

sample input:5

410820

7---

----

----

----

----

----

----

----

----

----

sample output:

here is pre:54

108720

here is in:45

781020

here is post:47

820105

here is bfs:54

108207

二叉排序樹實現 Python

定義 二叉排序樹或者是空樹,或者滿足以下性質 若它的左子樹不空,則左子樹上所有節點的值均小於根節點的值 若它的右子樹不空,則右子樹上所有節點的值均大於根節點的值 左右子樹又各是一顆二叉排序樹 注 二叉排序樹的中序遍歷為遞增有序序列 資料結構 class node def init self,valu...

python 二叉排序樹實現

節點 class node def init self,elem self.elem elem self.left none self.right none 二叉排序樹 class binarysearchtree def init self self.root none def is empty ...

二叉排序樹的實現(python)

二叉排序樹,又叫二叉搜尋樹,二叉查詢樹。二叉搜尋樹中比較複雜的就是刪除操作,我的刪除操作寫的最笨了,比較幼稚,但是對於初學者很容易看懂。看懂了之後再進行優化。因為我也是初學,網上大神的方法看不懂。就自己按照操作寫了乙個 想驗證自己寫的對不對,所以又寫了乙個前序遍歷。class node def in...