二叉樹的非遞迴遍歷(python

2021-09-13 01:52:37 字數 1837 閱讀 7209

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution(object):

#二叉樹非遞迴前序序遍歷

def pre_order(self, root):

if not root:

return none

node_list =

p = root

res =

while p or len(node_list):

# 遍歷到左子樹最下邊的葉子節點,並儲存遍歷過程中的節點

while p:

p = p.left

# 開始出棧

if len(node_list):

p = node_list[-1]

node_list.pop()

p = p.right

return res

# 二叉樹非遞迴中序遍歷

def middle_order(self, root):

node_list =

p = root

res =

while p or len(node_list) != 0:

# 遍歷到左子樹最下邊的葉子節點,並儲存遍歷過程中的節點

while p:

p = p.left

# 開始出棧

if len(node_list):

p = node_list[-1]

node_list.pop()

# 進入右子樹

p = p.right

return res

#二叉樹非遞迴後序序遍歷

def post_order(self, root):

if not root:

return none

node_list =

p = root

plast = none

res =

# 遍歷到左子樹最下邊的葉子節點,並儲存遍歷過程中的節點

while p:

p = p.left

# 開始出棧

while len(node_list):

p = node_list[-1]

node_list.pop()

# 若無右子樹或者右子樹被訪問,則訪問該節點

if not p.right or p.right == plast:

plast = p

else:

# 節點再次入棧

p = p.right

while p:

p = p.left

return res

def main():

solution = solution()

root = treenode(8)

root.left = treenode(6)

node1 = root.left

root.right = treenode(10)

node2 = root.right

node1.left = treenode(5)

node1.right = treenode(7)

node2.left = treenode(9)

node2.right = treenode(11)

print(solution.post_order(root))

if __name__ == '__main__':

sys.exit(main())

Python 二叉樹的非遞迴遍歷

二叉樹類實現 class bintnode def init self,dat,left none,right none self.data data self.left left self.right right統計樹中節點個數 def count bintnodes t if t is none...

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...