面试常考算法题补充

二叉树先序遍历的非递归实现:

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值