tree_0.svg

堆栈实现

  1. def stack_print(root):
  2. stack = []
  3. result = []
  4. while root or stack:
  5. while root:
  6. stack.append(root)
  7. root = root.left
  8. if stack:
  9. root = stack.pop()
  10. result.append(root.val)
  11. root = root.right
  12. return result

递归实现

  1. def recursive_print(root):
  2. result = []
  3. def inorder(root):
  4. if not root:
  5. return
  6. inorder(root.left)
  7. result.append(root.val)
  8. inorder(root.right)
  9. inorder(root)
  10. return result

完整代码

  1. class TreeNode(object):
  2. def __init__(self, val=None, left=None, right=None):
  3. self.left = left
  4. self.right = right
  5. self.val = val
  6. class BinTree(object):
  7. def __init__(self, root):
  8. self.root = root
  9. def stack_print(self, root):
  10. """堆栈实现"""
  11. stack = []
  12. while root or stack:
  13. while root:
  14. stack.append(root)
  15. root = root.left
  16. if stack:
  17. root = stack.pop()
  18. print(root.val)
  19. root = root.right
  20. def recursive_print(self, root):
  21. """递归实现"""
  22. if not root:
  23. return
  24. self.recursive_print(root.left)
  25. print(root.val)
  26. self.recursive_print(root.right)
  27. def main():
  28. left = TreeNode(2, left=TreeNode(4), right=TreeNode(5))
  29. right = TreeNode(3, left=TreeNode(6), right=TreeNode(7))
  30. root = TreeNode(1, left=left, right=right)
  31. tree = BinTree(root)
  32. print('递归 中序遍历:')
  33. tree.recursive_print(tree.root)
  34. print('堆栈 中序遍历:')
  35. tree.stack_print(tree.root)