3.黄金挑战——迭代实现二叉树的遍历
迭代法实现前中后序遍历
class Node:
def __init__(self, val=-1, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Tree:
def __init__(self, root=None):
self.root = root
def init_tree(self):
node_9 = Node(9)
node_15 = Node(15)
node_7 = Node(7)
node_20 = Node(20, node_15, node_7)
root = Node(3, node_9, node_20)
return root
class Traversal:
# 前序-迭代
def preorderTraversal(self, root):
res = list()
if not root:
return res
stack = []
node = root
while node or stack:
while node:
res.append(node.val)
stack.append(node)
node = node.left
node = stack.pop()
node = node.right
return res
# 中序-迭代
def inorderTraversal(self, root):
if not root:
return []
stack = []
res = []
while stack or root:
while root:
stack.append(root)
root = root.left
node = stack.pop()
res.append(node.val)
root = node.right
return res
# 后序-迭代
def postorderTraversal(self, root):
res = []
if not root:
return res
stack = []
node = root
while stack or node:
while node:
res.append(node.val)
stack.append(node)
node = node.right
node = stack.pop()
node = node.left
res.reverse()
return res
if __name__ == "__main__":
tree = Tree()
root = tree.init_tree()
visit = Traversal()
print(visit.preorderTraversal(root))
print(visit.inorderTraversal(root))
print(visit.postorderTraversal(root))