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 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...