代码随想录算法训练营第十八天 | 513.找树左下角的值、112. 路径总和、113. 路径总和ii

代码随想录算法训练营第十八天 | 513.找树左下角的值、112. 路径总和、113. 路径总和ii

  • 自己看到题目的第一想法
  • 看完代码随想录之后的想法
  • 自己实现过程中遇到哪些困难

链接: 513.找树左下角的值
链接: 112. 路径总和,和 113. 路径总和ii
链接: 从中序与后序遍历序列构造二叉树

自己看到题目的第一想法

513.找树左下角的值:层序遍历,输出最后一行的最左边的值。自己亲手写代码之后发现,有个问题就是,你怎么知道此时就是最后一层呢?另一种方法是递归法,采用后序遍历,递归处理逻辑是当中间节点的左叶子节点的子节点都为空的时候返回该左叶子节点的值。自己亲手写代码之后发现编译错误,缺少return语句。
112.路径总和和 113.路径总和ii:使用递归法用三部曲思考,第一返回类型和参数,返回类型应该是boolean,判断是否为路径和,参数输入应该是首先是根节点,其次是路径和targetSum;第二步是递归函数的终止条件,如果遍历完成路径和加起来等于targetSum则返回true,否则为false;第三步是递归的逻辑。113.路径总和ii我觉得在上面的基础上再增加一个记录节点路径的数组就好。

看完代码随想录之后的想法

513.找树左下角的值:看完答案之后发现,在迭代法也就是层序遍历过程中,你只需要记录每一层的最左边的节点的值,然后每一层每一层会覆盖掉,那么最终结束的时候你得到的就是最后一层的最左边的值。第二个关于自己写的错误代码,发现自己其实对于左侧理解有错误,左侧不一定必须是左叶子节点,只要是每一层的从左往右第一个就算是最左侧。并且对于卡哥的回溯,我觉得蛮复杂,我看力扣上关于递归进行深度优先搜索很简单。就是每递归一次也就是每往下进行探索一次,都对深度进行加1,但是我看没有进行回溯。之后看了视频知道这是递归中隐藏了回溯。这好复杂。

// 力扣深度优先搜索
class Solution {int curVal = 0;int curHeight = 0;public int findBottomLeftValue(TreeNode root) {int curHeight = 0;dfs(root, 0);return curVal;}public 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;}}
}// 卡哥递归法
class Solution {private int Deep = -1;private int value = 0;public int findBottomLeftValue(TreeNode root) {value = root.val;findLeftValue(root,0);return value;}private void findLeftValue (TreeNode root,int deep) {if (root == null) return;if (root.left == null && root.right == null) {if (deep > Deep) {value = root.val;Deep = deep;}}if (root.left != null) findLeftValue(root.left,deep + 1);if (root.right != null) findLeftValue(root.right,deep + 1);}
}

路径总和:看了卡哥视频觉得里面学问可真多,递归顺序,回溯等等都要考虑,我觉得目前我的水平看懂回溯确实困难,看了力扣觉得还蛮简单,前序遍历,如果根节点是Null直接返回false,每次递归都将targetSum-遍历的root.val,如果遍历到叶子节点就返回是否该节点的值等于targetSum。
113.路径总和ii:首先,返回的是一个二维数组,那么底层用什么实现呢?结合之前学过的知识,链表这种数据结构的增删查改效率比较高,对于数组不断改变且初始长度并不明确的情况,最好采用链表进行创建和声明。其次,声明了一个双端队列来辅助记录路径。关于双端队列里采用到的api有如下:

path.offerLast(root.val);//在队尾增加元素值
path.pollLast();//队尾元素出队

思路就是,枚举每一条从根节点到叶子节点的路径,当和为targetSum的时候就找到了。
从中序与后序遍历序列构造二叉树:总体思想还蛮简单,根据后序或者前序确定根节点之后去切中序,分割之后利用左子序去切割后序或者前序得到两个子序,之后再利用后序得到根节点····递归。

自己实现过程中遇到哪些困难

1.切割是怎么算切割了?代码如何写?
2.区间如何区分
3.java中用到了map,体会妙处

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Debezium系列之:部署Debezium采集Oracle数据库的详细步骤

Debezium系列之:部署Debezium采集Oracle数据库的详细步骤 一、部署Debezium Oracle连接器二、Debezium Oracle 连接器配置三、添加连接器配置四、可插拔数据库与不可插拔数据库一、部署Debezium Oracle连接器 部署的详细步骤可以参考博主这篇技术文章: Debezium系列之:安装…

怎么用3ds MAX制作蜂窝状模型?

1、新建多边形:打开3ds MAX软件,在样条线中新建一个多边形。 2、设置参数:切换到顶视图,设置多边形的参数,例如半径为10,变数为6,以形成一个六边形的基础。 3、复制并形成圆柱状:打开…

如何通过Postgres的日志进行故障排查?

文章目录 一、配置日志记录二、查看和分析日志三、使用日志进行故障排查的示例四、总结 在进行数据库管理和维护时,日志分析是一项至关重要的技能。PostgreSQL的日志记录功能可以帮助我们追踪数据库的运行状态,定位问题,以及优化性能。下面&a…

深入Git配置

git配置 git config -h usage: git config [<options>]Config file location--global use global config file--system use system config file--local use repository config file--worktree use per-worktree con…

【Java】如何获取客户端IP地址

在项目中往往涉及到“获取客户端IP地址”&#xff0c;常见到下面这样子的代码&#xff1a; package com.utils;import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.http.server.reactive.ServerHttpRequest; import java.net…

逻辑运算符

一 介绍 用于连接多个条件&#xff08; 多个关系表达式&#xff09; &#xff0c; 最终的结果也是一个 boolean 值。 &&#xff1a;逻辑与&&&#xff1a;短路与|&#xff1a;逻辑或||&#xff1a;短路或&#xff01; 取反^&#xff1a;异或 二 逻辑运算规则 a&a…

K210基础实验——独立按键中断

前言 学习K210开发板的独立按键和中断功能 一、涉及到的外设资源是K210开发板上的BOOT按键和RGB灯 二、BOOT按键按下&#xff0c;MCU上连接BOOT的IO口变为低电平&#xff0c;松开后为高电平 三、引脚对应关系 BOOT : IO16 RGB灯&#xff1a; R:IO6 G:IO7 B:IO8 四、在…

【linux】多路径|Multipath I/O 技术

目录 简略 详细 什么是多路径? Multipath安装与使用 安装 使用 Linux下multipath软件介绍 附录 配置文件说明 其他解 简略 略 详细 什么是多路径? 普通的电脑主机都是一个硬盘挂接到一个总线上&#xff0c;这里是一对一的关系。 而到了分布式环境&#xff0c;主机和存储网络连…

NLP(5)-softmax和交叉熵

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 感觉全连接层就像一个中间层转换数据的形态的,或者说预处理数据&#xff1f; 代码 softmax就是把输出的y 归一化&#xff0c;把结果转化为概率值&#xff01;&#xff0c;在分类问题中很常见。 而交叉熵是一种损失函数&…

UDP协议深度解析:从原理到应用全面剖析

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 前言 随着互联网的蓬勃发展&#xff0c;网络通信协议成为了支撑其稳定运行的关键。UDP协议作为网络通信协议中的重要一员&…

华为ensp中rip和ospf路由重分发 原理及配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月20日20点21分 路由重分发&#xff08;Route Redistribution&#xff09;是指路由器将从一种路由协议学习到的路由信息&#xff0c;通过另一种路由协议通告出去的功…

现货白银保证金交易要先分析趋势

现货白银是保证金交易品种&#xff0c;买卖过程中可能会涉及数十倍的资金杠杆&#xff0c;所以它对投资者的分析水平和交易水平的要求都比较高&#xff0c;所以在进入这个市场之前&#xff0c;投资者需要先学习一些基本的分析方法&#xff0c;当中可以分为基本面和技术面两大流…

每日一坑(pymongo版本从3.*升到4.*)

今天在做代码优化的时候发现pymongo版本不同会出现问题&#xff0c;正常3.*能跑的代码&#xff0c;一旦使用4.2或者4.3版本&#xff08;其他版本没有试&#xff0c;但应该也有问题&#xff09;就会出现 ServerSelectionTimeoutError问题&#xff0c;最后到官网找到了问题所在&a…

C++智能指针(二十)

一.RAII&#xff08;Resource Acquisition Is Initialization&#xff09; RAII资源获取即初始化&#xff0c;RAII的思想就是在构造时初始化资源&#xff0c;或者托管已经构造的资源。在析构的时候释放资源。一般不允许复制或赋值&#xff0c;并且提供若干的资源访问的方法。比…

URL地址解析至页面展示全过程(面试详细解答)

目录 1、解析URL 2、缓存判断 ​编辑3、DNS解析 ​编辑4、获取MAC地址 5、TCP三次握手 6、HTTP请求 7、服务器处理请求&#xff0c;返回HTTP响应 8、页面渲染 9、TCP四次挥手 10、浏览器解析HTML 11、浏览器布局渲染 1、解析URL 首先会对 URL 进行解析&#xff0c;…

RS232、RS485、RS422、TTL、CAN各自的区别

目录 一&#xff1a;工业串口通信标准RS232、RS485、RS422的区别 第一个区别、硬件管脚接口定义不同 第二个区别、工作方式不同 第三个区别、通信方式不同 第四个区别&#xff0c;逻辑特性不同 第五个区别、抗干扰性、传输距离和传输速率也不同 二&#xff1a;RS232、RS…

CentOS 源码安装 Python3

今天在安装部分服务的时候&#xff0c;由于系统 CentOS 中默认带了 Python2&#xff0c;但是我的项目需要是 Python3 支持&#xff0c;特此将整个安装步骤记录下来。 安装必要的依赖 安装环境依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlit…

docker安装并跑通QQ机器人实践(4)-bs-cqhttp搭建

go-cqhttp&#xff0c;基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现&#xff0c;只需简单的配置, 就可以基于 go-cqhttp 使用框架开发&#xff0c;具有轻量, 原生, 高并发, 低占用, 跨平台等特点。 1 go-cqhttp 官网及可执行文件下载链接 go-cqhttp 官网&#xff1a;ht…

【Linux】详解进程通信中信号量的本质同步和互斥的概念临界资源和临界区的概念

一、同步和互斥的概念 1.1、同步 访问资源在安全的前提下&#xff0c;具有一定的顺序性&#xff0c;就叫做同步。在多道程序系统中&#xff0c;由于资源有限&#xff0c;进程或线程之间可能产生冲突。同步机制就是为了解决这些冲突&#xff0c;保证进程或线程之间能够按照既定…

泛型的初步认识(2)

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x…