hot 100 第三十五题 35.二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历

示例 1:

复制代码
输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

复制代码
输入:root = []
输出:[]

示例 3:

复制代码
输入:root = [1]
输出:[1]

核心思路

二叉树遍历有三种方式:

  • 前序:根 → 左 → 右
  • 中序:左 → 根 → 右
  • 后序:左 → 右 →根

中序遍历的结果对于二叉搜索树 来说是升序序列

解法:递归(最简单)

复制代码
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        inorder(root, result);
        return result;
    }
    
    private void inorder(TreeNode node, List<Integer> result) {
        if (node == null) return;
        
        inorder(node.left, result);   // 左
        result.add(node.val);         // 根
        inorder(node.right, result);  // 右
    }
}
```

### 详细演示
```
二叉树:
    1
   / \
  2   3
 / \
4   5

递归调用栈:
inorder(1)
  ├─ inorder(2)
  │   ├─ inorder(4)
  │   │   ├─ inorder(null) 返回
  │   │   ├─ add(4) → [4]
  │   │   └─ inorder(null) 返回
  │   │
  │   ├─ add(2) → [4,2]
  │   │
  │   └─ inorder(5)
  │       ├─ inorder(null) 返回
  │       ├─ add(5) → [4,2,5]
  │       └─ inorder(null) 返回
  │
  ├─ add(1) → [4,2,5,1]
  │
  └─ inorder(3)
      ├─ inorder(null) 返回
      ├─ add(3) → [4,2,5,1,3]
      └─ inorder(null) 返回

结果: [4,2,5,1,3]
```

## 解法2:迭代(使用栈)

### 思路

用栈模拟递归的过程:
1. 一路向左,将所有左子节点入栈
2. 弹出栈顶,访问节点
3. 转向右子树,重复步骤1
```
核心:先找到最左边的节点,然后回溯

本质

中序遍历的核心:

  1. 递归思想 --- 左子树中序 + 根 + 右子树中序
  2. 模拟栈 --- 迭代用栈保存回溯路径
  3. Morris技巧 --- 利用空指针建立临时连接

应用场景

  • 二叉搜索树中序遍历得到升序序列
  • 验证二叉搜索树
  • 二叉搜索树中第K小元素
相关推荐
半夏微凉半夏殇2 小时前
x11与weston对比,优先选哪个
leetcode·均值算法·eclipse
2501_906565122 小时前
数学之美探究
算法
oier_Asad.Chen2 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
leisoo80974 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_17686 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5556 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴6 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆7 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng7 小时前
2024牛客暑期多校训练营1
算法
hetao17338377 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法