94. 二叉树的中序遍历
Origin: LeetCode 94
题目描述
给定一个二叉树的根节点 root,返回它的中序遍历结果。
示例
Input: root = [1, null, 2, 3]
Output: [1, 3, 2]
1
\
2
/
3
Input: root = []
Output: []
Input: root = [1]
Output: [1]
约束
- 树中节点数目范围是 [0, 100]
- -100 <= Node.val <= 100
关键信息
- 中序遍历:左 → 根 → 右
- 递归最简单,迭代用栈
- 二叉树节点结构:val + left + right
Resolution
我的解法
function inorderTraversal(root: TreeNode | null): number[] {
if (!root) return []
const result: number[] = []
const recursion = (node: TreeNode | null) => {
if (!node) return
if (node.left) {
recursion(node.left)
}
result.push(node.val)
if (node.right) {
recursion(node.right)
}
}
recursion(root)
return result
}解题思路
中序遍历:左 → 根 → 右。递归最直观:
- 递归左子树
- 读当前节点值
- 递归右子树
result 数组在外部定义,递归函数往里 push,避免递归返回值合并。
调整 push 的位置即可实现三种遍历:
- 前序(根左右):先 push,再递归左,再递归右
- 中序(左根右):先递归左,再 push,再递归右
- 后序(左右根):先递归左,再递归右,再 push
复杂度
- 时间:O(n),每个节点访问一次
- 空间:O(h),h 是树高,递归栈深度