二叉树遍历全攻略:3种方式轻松掌握

二叉树遍历算法详解:前序、中序与后序遍历

二叉树的遍历是数据结构与算法中的基础内容,掌握前序、中序和后序遍历对于理解树结构至关重要。以下是三种遍历方式的实现方法与应用场景分析。

递归实现

递归是最直观的遍历方式,代码简洁但需要注意栈溢出问题。

前序遍历(根-左-右)

def preorderTraversal(root):
    res = []
    def traverse(node):
        if not node:
            return
        res.append(node.val)
        traverse(node.left)
        traverse(node.right)
    traverse(root)
    return res

中序遍历(左-根-右)

def inorderTraversal(root):
    res = []
    def traverse(node):
        if not node:
            return
        traverse(node.left)
        res.append(node.val)
        traverse(node.right)
    traverse(root)
    return res

后序遍历(左-右-根)

def postorderTraversal(root):
    res = []
    def traverse(node):
        if not node:
            return
        traverse(node.left)
        traverse(node.right)
        res.append(node.val)
    traverse(root)
    return res

迭代实现

迭代法通过显式使用栈来模拟递归过程,更适合处理深度较大的树。

前序遍历迭代版

def preorderTraversal(root):
    res = []
    stack = []
    if root:
        stack.append(root)
    while stack:
        node = stack.pop()
        res.append(node.val)
        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)
    return res

中序遍历迭代版

def inorderTraversal(root):
    res = []
    stack = []
    curr = root
    while curr or stack:
        while curr:
            stack.append(curr)
            curr = curr.left
        curr = stack.pop()
        res.append(curr.val)
        curr = curr.right
    return res

后序遍历迭代版

def postorderTraversal(root):
    res = []
    stack = []
    prev = None
    while root or stack:
        while root:
            stack.append(root)
            root = root.left
        root = stack.pop()
        if not root.right or root.right == prev:
            res.append(root.val)
            prev = root
            root = None
        else:
            stack.append(root)
            root = root.right
    return res

莫里斯遍历(Morris Traversal)

该算法能在O(1)空间复杂度下完成遍历,通过临时修改树结构实现。

中序遍历莫里斯版

def inorderTraversal(root):
    res = []
    curr = root
    while curr:
        if not curr.left:
            res.append(curr.val)
            curr = curr.right
        else:
            pre = curr.left
            while pre.right and pre.right != curr:
                pre = pre.right
            if not pre.right:
                pre.right = curr
                curr = curr.left
            else:
                pre.right = None
                res.append(curr.val)
                curr = curr.right
    return res

应用场景分析

  • 前序遍历:用于复制树结构,序列化二叉树时常用
  • 中序遍历:二叉搜索树会产生有序序列,用于验证BST性质
  • 后序遍历:适用于删除树节点,计算子树属性等场景

复杂度对比

| 遍历方式 | 时间复杂度 | 空间复杂度 | |----------|------------|------------| | 递归 | O(n) | O(h) | | 迭代 | O(n) | O(h) | | 莫里斯 | O(n) | O(1) |

其中n为节点数,h为树高度。实际应用中应根据具体场景选择合适方法,递归简洁但可能栈溢出,迭代稳定但代码稍复杂,莫里斯节省空间但会修改树结构。

BbS.okane479.info/PoSt/1121_246355.HtM
BbS.okane480.info/PoSt/1121_284288.HtM
BbS.okane481.info/PoSt/1121_691408.HtM
BbS.okane482.info/PoSt/1121_769068.HtM
BbS.okane483.info/PoSt/1121_781914.HtM
BbS.okane484.info/PoSt/1121_545200.HtM
BbS.okane485.info/PoSt/1121_189947.HtM
BbS.okane486.info/PoSt/1121_255414.HtM
BbS.okane487.info/PoSt/1121_431002.HtM
BbS.okane488.info/PoSt/1121_568327.HtM
BbS.okane479.info/PoSt/1121_260618.HtM
BbS.okane480.info/PoSt/1121_634086.HtM
BbS.okane481.info/PoSt/1121_478259.HtM
BbS.okane482.info/PoSt/1121_978388.HtM
BbS.okane483.info/PoSt/1121_754321.HtM
BbS.okane484.info/PoSt/1121_961057.HtM
BbS.okane485.info/PoSt/1121_157826.HtM
BbS.okane486.info/PoSt/1121_940403.HtM
BbS.okane487.info/PoSt/1121_475315.HtM
BbS.okane488.info/PoSt/1121_981141.HtM
BbS.okane479.info/PoSt/1121_516931.HtM
BbS.okane480.info/PoSt/1121_749747.HtM
BbS.okane481.info/PoSt/1121_571488.HtM
BbS.okane482.info/PoSt/1121_730774.HtM
BbS.okane483.info/PoSt/1121_439033.HtM
BbS.okane484.info/PoSt/1121_621183.HtM
BbS.okane485.info/PoSt/1121_898974.HtM
BbS.okane486.info/PoSt/1121_706932.HtM
BbS.okane487.info/PoSt/1121_577477.HtM
BbS.okane488.info/PoSt/1121_269094.HtM
BbS.okane479.info/PoSt/1121_168632.HtM
BbS.okane480.info/PoSt/1121_540702.HtM
BbS.okane481.info/PoSt/1121_212373.HtM
BbS.okane482.info/PoSt/1121_727050.HtM
BbS.okane483.info/PoSt/1121_595760.HtM
BbS.okane484.info/PoSt/1121_017165.HtM
BbS.okane485.info/PoSt/1121_557604.HtM
BbS.okane486.info/PoSt/1121_175373.HtM
BbS.okane487.info/PoSt/1121_596616.HtM
BbS.okane488.info/PoSt/1121_438059.HtM
BbS.okane479.info/PoSt/1121_862725.HtM
BbS.okane480.info/PoSt/1121_511109.HtM
BbS.okane481.info/PoSt/1121_179242.HtM
BbS.okane482.info/PoSt/1121_944818.HtM
BbS.okane483.info/PoSt/1121_386984.HtM
BbS.okane484.info/PoSt/1121_587815.HtM
BbS.okane485.info/PoSt/1121_526457.HtM
BbS.okane486.info/PoSt/1121_975780.HtM
BbS.okane487.info/PoSt/1121_966368.HtM
BbS.okane488.info/PoSt/1121_851686.HtM
BbS.okane479.info/PoSt/1121_901457.HtM
BbS.okane480.info/PoSt/1121_249762.HtM
BbS.okane481.info/PoSt/1121_510907.HtM
BbS.okane482.info/PoSt/1121_739287.HtM
BbS.okane483.info/PoSt/1121_866429.HtM
BbS.okane484.info/PoSt/1121_747372.HtM
BbS.okane485.info/PoSt/1121_528888.HtM
BbS.okane486.info/PoSt/1121_544798.HtM
BbS.okane487.info/PoSt/1121_683686.HtM
BbS.okane488.info/PoSt/1121_084161.HtM
BbS.okane479.info/PoSt/1121_647020.HtM
BbS.okane480.info/PoSt/1121_861153.HtM
BbS.okane481.info/PoSt/1121_647074.HtM
BbS.okane482.info/PoSt/1121_647295.HtM
BbS.okane483.info/PoSt/1121_237801.HtM
BbS.okane484.info/PoSt/1121_219220.HtM
BbS.okane485.info/PoSt/1121_165551.HtM
BbS.okane486.info/PoSt/1121_631988.HtM
BbS.okane487.info/PoSt/1121_146874.HtM
BbS.okane488.info/PoSt/1121_737898.HtM
BbS.okane479.info/PoSt/1121_178418.HtM
BbS.okane480.info/PoSt/1121_967466.HtM
BbS.okane481.info/PoSt/1121_083096.HtM
BbS.okane482.info/PoSt/1121_564462.HtM
BbS.okane483.info/PoSt/1121_671084.HtM
BbS.okane484.info/PoSt/1121_832594.HtM
BbS.okane485.info/PoSt/1121_189867.HtM
BbS.okane486.info/PoSt/1121_822911.HtM
BbS.okane487.info/PoSt/1121_627401.HtM
BbS.okane488.info/PoSt/1121_560446.HtM

#牛客AI配图神器#

全部评论

相关推荐

纯真的河老师在喝茶:第一个是这个时间点岗位少,第二个是这个简历重复度太高了,10个有9个简历差不多的
点赞 评论 收藏
分享
热爱生活的咸鱼在吃瓜:个人建议,项目太简单了,实习干的活都是测试的活,反正又没人知道你实习干啥了,你懂吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务