找树左下角的值(DFS 深度优先搜索)| LeetCode 513

✨ 题目描述

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

提示:

  • 二叉树中至少有一个节点。

📄 示例

示例 1

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

示例 2

复制代码
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

🔥 解题思路(深度优先搜索 DFS)

我们要找的是最底层、最左边的节点,因此需要注意:

  • 最深层优先:记录当前的最大深度。

  • 左节点优先:递归时先访问左子树,再访问右子树。

  • 当遍历到一个比当前记录更深的节点时,更新答案。

详细步骤

  1. 定义两个全局变量:

    • curHeight:当前遍历到的最大深度。

    • curVal:当前最底层最左节点的值。

  2. 从根节点开始进行深度优先搜索:

    • 每到下一层,height + 1

    • 先递归左子树,再递归右子树(保证左优先)。

    • 当到达一个更深的节点时,更新 curHeightcurVal


🧩 代码实现

java 复制代码
// 定义二叉树结构
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

// 解决方案
class Solution {
    int curHeight = 0;  // 当前最大高度
    int curVal = 0;     // 当前最左节点值
    
    public int findBottomLeftValue(TreeNode root) {
        dfs(root, 0);
        return curVal;
    }
    
    private void dfs(TreeNode root, int height) {
        if (root == null) return;
        
        height++;
        // 先递归左子树
        dfs(root.left, height);
        // 再递归右子树
        dfs(root.right, height);
        
        // 如果当前高度大于之前的最大高度,更新
        if (height > curHeight) {
            curHeight = height;
            curVal = root.val;
        }
    }
}

⚡ 复杂度分析

  • 时间复杂度:O(N),其中 N 是节点数量,需要遍历所有节点一次。

  • 空间复杂度:O(H),其中 H 是树的高度(递归栈空间)。


📌 小结

  • 这道题考察的是DFS 深度优先搜索的基本功。

  • 特别注意要先遍历左子树,这样才能确保找到"最左"的节点。


🎯 其他解法(拓展阅读)

实际上,这题也可以用**BFS(广度优先搜索)**来做,使用队列层层推进,最后一层的第一个节点即是答案!

如果你想了解 BFS 解法,欢迎点赞收藏,我会在评论区继续补充完整~


❤️ 如果觉得有帮助,欢迎【点赞】【收藏】【关注】支持我!

你的支持就是我更新的最大动力!一起来刷题提升吧~

相关推荐
User_芊芊君子20 分钟前
【LeetCode经典题解】递归破解对称二叉树之谜
算法·leetcode·职场和发展
Rock_yzh21 分钟前
LeetCode算法刷题——49. 字母异位词分组
数据结构·c++·学习·算法·leetcode·职场和发展·哈希算法
小欣加油22 分钟前
leetcode 2654 使数组所有元素变成1的最少操作次数
数据结构·c++·算法·leetcode·职场和发展
Kt&Rs25 分钟前
11.12 LeetCode 题目汇总与解题思路
算法·leetcode
m0_5656111339 分钟前
Java Stream流操作全解析
java·开发语言·算法
大千AI助手1 小时前
决策树悲观错误剪枝(PEP)详解:原理、实现与应用
人工智能·算法·决策树·机器学习·剪枝·大千ai助手·悲观错误剪枝
九年义务漏网鲨鱼1 小时前
【机器学习算法】面试中的ROC和AUC
算法·机器学习·面试
草莓熊Lotso1 小时前
《算法闯关指南:优选算法--位运算》--38.消失的两个数字
服务器·c++·算法·1024程序员节
剪一朵云爱着7 小时前
力扣81. 搜索旋转排序数组 II
算法·leetcode·职场和发展
报错小能手9 小时前
刷题日常 5 二叉树最大深度
算法