【LeetCode-中等题】513. 找树左下角的值

news/2024/7/20 22:44:51 标签: leetcode, 深度优先, 算法

文章目录

    • 题目
    • 方法一:前序递归
    • 方法二:层序遍历

题目

在这里插入图片描述

方法一:前序递归

在递归遍历到叶子结点时,对比此时的节点深度,若当前节点深度大于当前最大深度,就更新value值,最后记录下的value即为最下最左的节点值

带值(深度)递归(纯递归

class Solution {
    int Deep = -1;
    int value = 0;
    public int findBottomLeftValue(TreeNode root) {
        dfs(root,0);
        return value ;
    }
    public void dfs(TreeNode root,int depth){
        if(root == null) return;
        if(root.left == null &&root.right == null) {
            if(depth >Deep){
                Deep = depth;
                value = root.val;
            }
        }
        dfs(root.left,depth+1);
        dfs(root.right,depth+1);
    }
}

不带值(深度)递归(递归+深度回溯

class Solution {
    int Deep = -1;
    int value = 0;
    int depth = 0;
    public int findBottomLeftValue(TreeNode root) {
        dfs(root);
        return value ;
    }
    public void dfs(TreeNode root){
        if(root == null) return;
        if(root.left == null &&root.right == null) {
            if(depth >Deep){
                Deep = depth;
                value = root.val;
            }
        }
        depth++;
        dfs(root.left);
        dfs(root.right);
        depth--;
    }
}

方法二:层序遍历

层序遍历 按照从右向左加入每层节点的值,这样每层取出节点的时候,最后记录的就是每一层最左的节点值,然后直到最后一层,记录下最后一层最左的值

 public int findBottomLeftValue(TreeNode root) {
        int res  = 0;
        Deque<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            root = queue.poll();
            res = root.val;
            if(root.right!=null) queue.offer(root.right);
            //按照从右向左加入每层节点的值,这样每层取出节点的时候,最后记录的就是每一层最左的节点值
            if(root.left!=null) queue.offer(root.left);
        }
        return res;
    }

http://www.niftyadmin.cn/n/5044664.html

相关文章

因子与质因子的关系

以整数 162 为例: 它的质因子是 [2, 3]&#xff0c; 160 2^1 * 3^4 &#xff08;设两个幂 a1, b4) 其实它的因子就是由各个质因子的 0-n 次幂的组合相乘而来&#xff0c; 2^0 * 3^0 1 2^1 * 3^0 2 2^0 * 3^1 3 2^1 * 3^1 6 2^0 * 3^2 9 2^1 * 3^2 18 2^0 * 3…

业主方怎么管理固定资产

业主方可以通过以下几种方式来管理固定资产&#xff1a; 建立资产管理制度&#xff1a;制定明确的资产采购、使用、维护、报废等流程和标准&#xff0c;确保资产管理的规范性和透明度。 采用专业的资产管理软件&#xff1a;通过数字化手段对固定资产进行管理和监控&#xff0c;…

20230920研发面经整理

1.cpp中的虚函数和虚函数表 C中的虚函数的作用主要是实现了多态的机制。关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数 虚函数表是指在每个包含虚函数的类中都存在着一个函数地址的数组。当我们用…

对面向对象OOP的理解

面向对象编程简称OOP&#xff0c;OOP是一种编程思想&#xff0c;Java就是面向对象的语言。俗话说&#xff0c;万物皆是对象&#xff0c;万物即是存在的实例&#xff0c;OOP的思想就是建立抽象模型来反映事物的特征&#xff0c;比如抽象出汽车类&#xff0c;定义品牌和价格属性&…

RabbitMQ:基于DelayExchange插件实现延迟队列

因为延迟队列的需求非常多&#xff0c;所以RabbitMQ的官方也推出了一个插件&#xff0c;原生支持延迟队列效果。 这个插件就是DelayExchange插件。参考RabbitMQ的插件列表页面&#xff1a;Community Plugins — RabbitMQ 使用方式可以参考官网地址&#xff1a;Scheduling Mes…

通讯网关软件004——利用CommGate X2Mbt实现Modbus TCP访问Mysql服务器

本文介绍利用CommGate X2Mbt实现Modbus TCP访问Mysql数据库。CommGate X2MBT是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现上位机通过Modbus TCP来获取Mysql数据库的数据。 【解决方案…

java-- 字符串+拼接详解, 性能调优 (底层原理实现)

目录 简单了解一下字符串 String类里面是如何存放字符串的? String的不可变性 字符串拼接的方法 1.使用拼接字符串 2. 使用concat 3. 使用StringBuilder 4.StringBuffer 使用字符串拼接的原理 使用concat StringBuilder 效率比较 简单了解一下字符串 字符串在java…

Java第3章 类的封装

目录 内容说明 章节内容 一、类为什么要进行封装 封装性后实现 二、类的基本封装