Skip to content

力扣树算法题分类解析

1. 树的遍历(基础)

类型特点:树的遍历是所有树问题的基础,包括前序、中序、后序(DFS)和层序(BFS)。掌握递归和迭代两种写法是必须的。

难度题目核心思路简介
简单144. 二叉树的前序遍历根左右,递归/迭代(栈)
简单94. 二叉树的中序遍历左根右,递归/迭代(栈)
简单145. 二叉树的后序遍历左右根,递归/迭代(栈)
中等102. 二叉树的层序遍历队列实现 BFS,按层输出
中等107. 二叉树的层序遍历 II层序遍历后反转结果
中等103. 二叉树的锯齿形层序遍历层序遍历 + 奇偶层方向标记
简单589. N 叉树的前序遍历N 叉树的 DFS 遍历
简单590. N 叉树的后序遍历N 叉树的 DFS 遍历
中等429. N 叉树的层序遍历N 叉树的 BFS 遍历

2. 树的性质与属性

类型特点:这类题目考察树的深度、对称性、平衡性、直径等基本属性,通常用递归解决。

难度题目核心思路简介
简单104. 二叉树的最大深度递归:max(左子树深度,右子树深度)+1
简单111. 二叉树的最小深度注意叶子节点定义,递归需考虑单子树情况
简单100. 相同的树同时递归比较两树节点
简单101. 对称二叉树递归比较左子树的左和右子树的右
简单110. 平衡二叉树递归计算高度,同时判断平衡性
简单226. 翻转二叉树递归交换左右子树
简单543. 二叉树的直径递归计算深度,直径 = 左深度 + 右深度
中等662. 二叉树最大宽度BFS 层序遍历,对节点编号

3. 二叉搜索树(BST)

类型特点:二叉搜索树的中序遍历是有序序列,利用这一特性可以解决验证 BST、第 K 小元素、转换 BST 等问题。

难度题目核心思路简介
中等98. 验证二叉搜索树中序遍历检查是否递增,或递归传递上下界
简单700. 二叉搜索树中的搜索利用 BST 性质,递归或迭代查找
简单108. 将有序数组转换为二叉搜索树递归取中间节点作为根
中等230. 二叉搜索树中第K小的元素中序遍历计数,或记录子树节点数
中等235. 二叉搜索树的最近公共祖先利用大小关系:p,q 分居两侧则当前节点为 LCA
中等538. 把二叉搜索树转换为累加树反序中序遍历(右-根-左),累加节点值

4. 树的路径与求和

类型特点:这类题目要求计算从根到叶子或任意节点之间的路径和,通常用 DFS 回溯解决。

难度题目核心思路简介
简单112. 路径总和DFS 递减 target,判断叶子节点时是否归零
中等113. 路径总和 IIDFS + 回溯,记录所有满足条件的路径
中等437. 路径总和 III前缀和 + 哈希表优化(树上的两数之和)
简单257. 二叉树的所有路径DFS 回溯,记录路径字符串
中等129. 求根节点到叶节点数字之和DFS 累加路径数字
困难124. 二叉树中的最大路径和递归计算单侧贡献,全局变量记录最大值

5. 树的构造与序列化

类型特点:给定两种遍历序列(如前序+中序)重建二叉树,或者将树序列化为字符串再反序列化。

难度题目核心思路简介
中等105. 从前序与中序遍历序列构造二叉树前序确定根,中序分割左右子树,递归构建
中等106. 从中序与后序遍历序列构造二叉树后序确定根,中序分割左右子树
中等654. 最大二叉树递归找最大值作为根
中等297. 二叉树的序列化与反序列化前序遍历 + 特殊标记空节点
中等449. 序列化和反序列化二叉搜索树利用 BST 性质优化序列化

6. 最近公共祖先(LCA)

类型特点:寻找两个节点的最近公共祖先,是树中非常重要的算法,也是面试高频题。

难度题目核心思路简介
中等236. 二叉树的最近公共祖先递归查找:如果左右子树分别找到 p,q 则当前节点为 LCA
中等235. 二叉搜索树的最近公共祖先利用大小关系快速判断
中等1644. 二叉树的最近公共祖先 II(会员)考虑节点可能不存在的情况

7. 层序遍历变种

类型特点:在层序遍历的基础上,增加一些额外要求,如右视图每层最大值每层平均值等。

难度题目核心思路简介
中等199. 二叉树的右视图层序遍历,记录每层最后一个节点
中等637. 二叉树的层平均值层序遍历,计算每层平均值
中等515. 在每个树行中找最大值层序遍历,记录每层最大值
中等513. 找树左下角的值BFS 从右往左遍历,最后一个节点即左下角
中等1161. 最大层内元素和层序遍历,计算每层和

8. 其他进阶问题

类型特点:这类题目涉及更复杂的树结构(如 N 叉树、Trie 树)或更巧妙的算法思想。

难度题目核心思路简介
中等116. 填充每个节点的下一个右侧节点指针利用已建立的 next 指针进行层序遍历
中等117. 填充每个节点的下一个右侧节点指针 II非完美二叉树,同样可用 BFS 或利用 next
中等114. 二叉树展开为链表前序遍历展开,原地修改
中等208. 实现 Trie (前缀树)多叉树结构,每个节点存储子节点映射
困难212. 单词搜索 IITrie + 回溯
困难968. 监控二叉树树形 DP,状态转移

树算法核心解题模板(JavaScript)

1. 二叉树节点定义

javascript
function TreeNode(val, left, right) {
    this.val = (val===undefined ? 0 : val)
    this.left = (left===undefined ? null : left)
    this.right = (right===undefined ? null : right)
}

2. DFS 递归模板

javascript
function dfs(node) {
    if (!node) return; // 终止条件
    
    // 前序遍历位置
    dfs(node.left);
    // 中序遍历位置
    dfs(node.right);
    // 后序遍历位置
}

3. BFS 层序遍历模板

javascript
function levelOrder(root) {
    if (!root) return [];
    const queue = [root];
    const result = [];
    
    while (queue.length) {
        const levelSize = queue.length;
        const currentLevel = [];
        
        for (let i = 0; i < levelSize; i++) {
            const node = queue.shift();
            currentLevel.push(node.val);
            if (node.left) queue.push(node.left);
            if (node.right) queue.push(node.right);
        }
        result.push(currentLevel);
    }
    return result;
}

刷题建议

  1. 基础遍历:先从 144. 前序遍历94. 中序遍历102. 层序遍历 入手,熟练递归和迭代两种写法。

  2. 树的性质:练习 104. 最大深度101. 对称二叉树226. 翻转二叉树,熟悉递归思想。

  3. 路径与求和:掌握 112. 路径总和113. 路径总和 II,理解回溯过程。

  4. 二叉搜索树:重点练习 98. 验证二叉搜索树230. 第K小的元素,利用中序遍历有序特性。

  5. 进阶挑战:最后攻克 236. 最近公共祖先124. 最大路径和297. 序列化 等经典难题。

Released under the MIT License.