二叉树遍历的非递归实现总结

由于准备面试的时候看了很多的面经中都写到问道二叉树的遍历是不允许使用递归实现的.之前一直在实习,好久没有更新blog.现在开始重新编写,记录我的找工作和实习之旅.

二叉树的前序遍历

# 二叉树的前序遍历
class Solution:
    def preorderTraversal(self, root):
        if not root:
            return []
        stack, res = [root], []
        while stack:
            top = stack.pop()
            if top:
                stack.append(top.right)
                stack.append(top.left)
                res.append(top.val)
        return res

二叉树的中序遍历

# 二叉树的中序遍历
class Solution1:
    def inorderTraversal(self, root):
        if not root:
            return []
        stack, result = [], []
        while stack or root:
            if root is not None:
                stack.append(root)
                root = root.left
            else:
                root = stack.pop()
                result.append(root.val)
                root = root.right
        return result

二叉树的后序遍历:

之前两个遍历仔细看看代码还是比较好理解的,对于后序遍历在leetcode上也是一道hard难度的题目因此,我着重讲解一下,就我自己总结的经验.二叉树后续遍历总结为"左右中",先左子树再右子树,最终遍历根节点.其实将这个过程进行一个镜像反转,实际就很类似前序遍历了,最后的顺序为"中右左",因此可以直接根据前序遍历的代码进行修改.

# 二叉树的后序遍历
class Solution2:
    def postorderTraversal(self, root):
        if not root:
            return []
        stack, result = [root], []
        while stack:
            top = stack.pop()
            if top:
                stack.append(top.left)
                stack.append(top.right)
                result.append(top.val)
        return result[::-1]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值