二叉树三种遍历的递归和非递归实现

1. 前序遍历

1.1 递归实现

def pre_order(root):
    if root is None:
        return
    print(root.val)
    pre_order(root.left)
    pre_order(root.right)

1.2 非递归实现

def pre_order(root):
    stack = []
    p = root
    while p or stack:
        while p:
            print(p.val)
            stack.append(p)
            p = p.left
        if stack:
            p = stack.pop(-1)
            p = p.right

2. 中序遍历

2.1 递归实现

def in_order(root):
    if root is None:
        return
    in_order(root.left)
    print(root.val)
    in_order(root.right)

2.2 非递归实现

def in_order(root):
    stack = []
    p = root
    while p or stack:
        while p:
            stack.append(p)
            p = p.left
        if stack:
            p = stack.pop(-1)
            print(root.val)
            p = p.right

3. 后序遍历

3.1 递归实现

def post_order(root):
    if root is None:
        return
    post_order(root.left)
    post_order(root.right)
    print(root.val)

3.2 非递归实现

def post_order(root):
    if root is None:
        return
    stack1, stack2 = [root], []
    while stack1:
        node = stack1.pop(-1)
        stack2.append(node)
        if node.left:
            stack1.append(node.left)
        if node.right:
            stack1.append(node.right)
    while stack2:
        node = stack2.pop(-1)
        print(node.val)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值