513. 找树左下角的值 - 力扣(LeetCode)

题目描述

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

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

题目示例

输入: root = [2,1,3]

输出: 1

解题思路

深度优先搜索

使用 depth 记录遍历到的节点的深度,result 记录深度在 depth 的最左节点的值。在深度优先搜索时,我们先搜索当前节点的左子节点,再搜索当前节点的右子节点,然后判断当前节点的深度 depth 是否大于 maxDepth,如果是,那么将 result 设置为当前结点的值,maxDepth 设置为 depth。

由于我们总是先遍历左节点,再遍历右节点,所以我们可以保证我们每一次更新的最大深度时总是在当前层中的最左侧,记录的是最大深度最左侧节点的值。

广度优先搜索

使用广度优先搜索遍历每一层的节点。在遍历一个节点时,需要先把它的非空右子节点放入队列,然后再把它的非空左子节点放入队列,这样才能保证从右到左遍历每一层的节点。广度优先搜索所遍历的最后一个节点的值就是最底层最左边节点的值。

参考代码

深度优先搜索

java 复制代码
class Solution {
    public int maxDepth = Integer.MIN_VALUE;
    public int result;
    public int findBottomLeftValue(TreeNode root) {
        traversal(root, 0);
        return result;
    }
    public void traversal(TreeNode node, int depth) {
        // 如果是叶子结点
        if(node.left == null && node.right == null) {
            // 因为每一层是先看左再看右,所以第一个是最左边的
            // 判断是不是第一个遇到的叶子结点,代表是最左边的
            if(depth > maxDepth) {
                maxDepth = depth;
                result = node.val;
                return;
            }
        }
        if(node.left != null) {
            traversal(node.left, depth + 1);
        }
        if(node.right != null) {
            traversal(node.right, depth + 1);
        }
    }
}

广度优先搜索

java 复制代码
class Solution {
    public int findBottomLeftValue(TreeNode root) {
        int ret = 0;
        Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            TreeNode p = queue.poll();
            if (p.right != null) {
                queue.offer(p.right);
            }
            if (p.left != null) {
                queue.offer(p.left);
            }
            ret = p.val;
        }
        return ret;
    }
}
相关推荐
啊我不会诶13 分钟前
最小生成树
c++·笔记·学习·算法
liuyao_xianhui27 分钟前
优选算法_栈_删除字符中的所有相邻重复项_C++
开发语言·数据结构·c++·python·算法·leetcode·链表
老虎062735 分钟前
LeetCode热题100 刷题笔记(第三天)链表 「两数相加」
笔记·leetcode·链表
WolfGang00732138 分钟前
代码随想录算法训练营 Day22 | 回溯算法 part04
数据结构·算法
tankeven39 分钟前
HJ154 kotori和素因子
c++·算法
Shirley~~43 分钟前
力扣hot100:相交链表
前端·算法
会编程的土豆1 小时前
【leetcode hot 100】二叉树
算法·leetcode
罗湖老棍子1 小时前
花神游历各国(信息学奥赛一本通- P1550)(洛谷-P4145)
数据结构·算法·线段树·势能数·区间开平方根 区间查询
Mr_Xuhhh1 小时前
LeetCode 热题 100 刷题笔记:数组与排列的经典解法(续)
算法·leetcode·职场和发展
炽烈小老头2 小时前
【每天学习一点算法 2026/03/29】搜索二维矩阵 II
学习·算法·矩阵