三種二叉樹遍歷的演算法(python實現)

2021-08-21 16:19:43 字數 2768 閱讀 5265

前序遍歷(根節點-左孩子,右孩子)

#前序遍歷

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def __init__(self):

self.x = #按順序儲存節點的列表

def qianxu(self,phead):

root = phead

# 終止判定

if root != none:

# 新增每一步根節點

# 先向左搜尋

left = root.left

self.qianxu(left)

# 再向右搜尋

right = root.right

self.qianxu(right)

return self.x

s = solution()

a1 = treenode(10)

a2 = treenode(5)

a3 = treenode(12)

a4 = treenode(4)

a5 = treenode(7)

a1.left = a2

a1.right = a3

a2.left = a4

a2.right = a5

s.qianxu(a1)

中序遍歷(左孩子-根節點-右孩子)

#中序遍歷

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def __init__(self):

self.x = # 儲存遍歷結果

self.y = # 儲存執行到當前節點,經過的節點

def zhongxu(self,phead):

root = phead

# 往左搜尋到最左邊乙個

while root != none:

root = root.left

if len(self.y) != 0:

# 將經過節點列表的最後乙個提取出來

r = self.y.pop(-1)

# 將最後乙個節點提取出來並儲存

root = r.right

# 對該節點的右孩子進行訪問

# 如果沒有右孩子,則直接訪問它之前經過的節點

self.zhongxu(root)

return self.x

s = solution()

a1 = treenode(10)

a2 = treenode(5)

a3 = treenode(12)

a4 = treenode(4)

a5 = treenode(7)

a1.left = a2

a1.right = a3

a3.left = a4

a3.right = a5

s.zhongxu(a1)

後序遍歷(左孩子-右孩子-父節點)

#後序遍歷

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def __init__(self):

self.x = #儲存當前經歷過的節點

self.y = #儲存遍歷結果

self.pre = none #儲存上一步的節點

def houxu(self,phead):

root = phead

# 一直搜尋到最左的節點

while root!=none:

root = root.left

if len(self.x) != 0:

# 提取的最後乙個節點

r = self.x[-1]

# 如果當前節點的右孩子是空的,或者當前節點的右孩子是之前剛提取儲存的節點

if r.right == none or r.right == self.pre:

# 將該節點儲存為上乙個節點

self.pre = r

# 提取該節點

t = self.x.pop(-1)

# 儲存該節點

self.houxu(none)

# 如果當前節點有未遍歷的右孩子

elif r.right != none:

self.pre = r

# 對右孩子進行遞迴(注意這裡不能刪去父節點)

self.houxu(r.right)

return self.y

s = solution()

a1 = treenode(10)

a2 = treenode(5)

a3 = treenode(12)

a4 = treenode(4)

a5 = treenode(7)

a1.left = a2

a1.right = a3

a3.left = a4

a3.right = a5

s.houxu(a1)

二叉樹的三種遍歷

重新又看了一遍二叉樹 binary tree 發現很多東西自己還沒有弄明白,原來三種遍歷方式還不是自己想象中的那樣 前序遍歷 preorder 是先輸出自己,然後左,最後右。中序遍歷 inorder 是先左,再輸出自己,最後右。後序遍歷 postorder 是先左,再右,最後輸出自己。所謂的xx遍歷...

二叉樹的三種遍歷

在這裡說一下二叉樹的三種遍歷 前序,中序,後序 正文 前序遍歷 是指先從根開始,再依次找尋左子結點 右子結點。學習時的經驗就是 看圖學習 第乙份圖 這樣看來 1.先找最基本的根結點 詞窮 這裡是a。2.接著找以a為根結點的左子結點,這裡是b。3.而以b為根結點也會出現左右結點,這就又有了乙個左結點d...

二叉樹的三種遍歷

二叉樹是n n 0 個節點的有限集合,它或者是空樹 n 0 或者是有乙個根節點及兩顆不相交的且分別稱為左 右子樹的二叉樹所組成。可見,二叉樹同樣具有遞迴性質。特別需要注意的是,儘管樹和二叉樹的概念之間有許多聯絡,但它們是兩個不同的概念,樹和二叉樹之間最主要的區別是 二叉樹結點的子樹要區分左子樹和右子...