二叉树先序遍历的非递归实现:
def preOrder(root):
if not root:
return
stack = [root] # 初始化一个栈 用于代替递归调用的系统栈
while stack:
node = stack.pop()
print(node.val)
# 因为要先遍历左子树 所以要先将右子树入栈 先进后出!
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
二叉树中序遍历的非递归实现:
def inOrder(root):
if not root:
return
stack = []
while root or stack:
while root: # 第一次遍历 将当前结点的左子树全部放入栈中,直到左子树为空
stack.append(root)
root = root.left
root = stack.pop() # 第二次遍历
print(root.val)
root = root.right # 每弹出一个节点都要查看当前结点的右子树
二叉树后序遍历的非递归实现:
def postOrder(root):
if not root:
return
stack1 = [root]
stack2 = []
# 逆后序遍历
while stack1:
node = stack1.pop()
if node.left:
stack1.append(node.left)
if node.right:
stack1.append(node.right)
stack2.append(node)
while stack2:
print(stack2.pop().val)