前序遍歷(根節點-左孩子,右孩子)
#前序遍歷
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 或者是有乙個根節點及兩顆不相交的且分別稱為左 右子樹的二叉樹所組成。可見,二叉樹同樣具有遞迴性質。特別需要注意的是,儘管樹和二叉樹的概念之間有許多聯絡,但它們是兩個不同的概念,樹和二叉樹之間最主要的區別是 二叉樹結點的子樹要區分左子樹和右子...