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;
    }
}
相关推荐
Navigator_Z7 分钟前
LeetCode //C - 1209. Remove All Adjacent Duplicates in String II
c语言·算法·leetcode
ShineWinsu2 小时前
对于 C++:C++14中从变量模板、泛型 Lambda 到并发与字面量的解析
c++·算法
土司大王2 小时前
LeetCode hot100——合并两个有序链表
算法·leetcode·链表
码行山野赴时序归途3 小时前
算法效率的度量(上):时间复杂度中的对数思维
c语言·数据结构·算法
算AI3 小时前
基于LLM的无人机仿真测试:新方法竞赛夺佳绩
人工智能·深度学习·算法·机器学习·ai
kaixin_啊啊4 小时前
专用优化算法LKH
算法
_Narcissus_6 小时前
二分算法笔记及例题
数据结构·c++·笔记·算法·蓝桥杯·查找·二分算法
tachibana26 小时前
RAGAS 指标解读
数据库·人工智能·算法·机器学习·架构·大模型·llm
qq_419563096 小时前
ToT 的 BFS/DFS 有个致命缺口:蒙特卡洛树搜索(MCTS)用「随机试错+统计」让大模型想得更深,小模型 + 它竟超过 GPT-4
算法·深度优先·宽度优先