二叉树的中序遍历

中序遍历是二叉树遍历的一种核心方式,指按照 左子树 → 根节点 → 右子树 的顺序访问树中所有节点。

为什么叫"中"序遍历?

因为根节点("中")是在左子树和右子树之间被访问的

  • 前序遍历:根 → 左 → 右

  • 中序遍历:左 → → 右

  • 后序遍历:左 → 右 →


核心特点

  • 遍历顺序:对每个子树都递归地执行「先访问左子树,再访问根节点,最后访问右子树」

  • 二叉搜索树的特性:对二叉搜索树(BST)中序遍历会得到升序排列的节点值序列


示例说明

假设有以下二叉树:

    5
   / \
  3   7
 / \   \
1   4   9

中序遍历过程:

  1. 遍历节点5的左子树(以3为根)
    • 遍历节点3的左子树(以1为根)
      • 节点1无左子树 → 访问1

    • 访问3

    • 遍历节点3的右子树(以4为根)→ 访问4

  2. 访问5

  3. 遍历节点5的右子树(以7为根)
    • 访问7

    • 遍历节点7的右子树(以9为根)→ 访问9

结果1 → 3 → 4 → 5 → 7 → 9(升序)


实现方式

1. 递归实现(最直观)
def inorder_traversal(root):
    if not root:
        return
    inorder_traversal(root.left)   # 遍历左子树
    print(root.val)                # 访问根节点
    inorder_traversal(root.right)  # 遍历右子树
2. 非递归实现(栈)
def inorder_traversal(root):
    stack = []
    result = []
    cur = root
    
    while cur or stack:
        # 一直向左走到最底层
        while cur:
            stack.append(cur)
            cur = cur.left
        
        # 访问节点并转向右子树
        cur = stack.pop()
        result.append(cur.val)
        cur = cur.right
    
    return result

复杂度分析

  • 时间复杂度:O(n),每个节点访问一次

  • 空间复杂度:O(h),h为树高(递归栈或显式栈的深度)

典型应用

  • 二叉搜索树的排序输出

  • 验证一棵树是否为二叉搜索树

  • 表达式树的中缀表达式生成


关键点:中序遍历的"中"指根节点在中间被访问,这个特性使其在 BST 相关算法中尤为重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值