【LeetCode笔记】117.填充每个节点的下一个右侧节点指针 II(二叉树、DFS)

文章目录

  • 题目描述
  • 思路 && 代码

题目描述

  • 很烦…面试被这题干碎了,赶紧给查漏补缺一波!
    在这里插入图片描述
    在这里插入图片描述

思路 && 代码

  • 主要思路:先右,再左(因为左边依赖右边!)
  • getNext():当前节点,无法包办子节点的 next 了,这份责任交给当前节点的 next !当然,如果 next 不行,那么继续递归传递责任(有点像责任链模式)
  • 对了,不一定得层序 BFS,因为对于当前节点来说,只要右边已经维护了就行。
  • 其他见注释~已经拉满注释了~
/*
// Definition for a Node.
class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, Node _left, Node _right, Node _next) {val = _val;left = _left;right = _right;next = _next;}
};
*/class Solution {// 总思路:在当前层已经完善 next 的情况下,用当前层信息,对下一层进行维护public Node connect(Node root) {// Case 1:空节点if(root == null) return root;// Case 2:左右双全:直接左指右if(root.left != null && root.right != null) {root.left.next = root.right;}// Case 3: 有左无右:靠你了,我的下一个节点!if(root.left != null && root.right == null) {root.left.next = getNext(root.next); // 传入 root 的 next,用以获取可行的 next}// Case 4: 有右if(root.right != null) {root.right.next = getNext(root.next); // 同 Case 3}// 先右再左:因为得先获得右边节点的 nextconnect(root.right);connect(root.left);return root;}// 获取第一个节点。Node getNext(Node root) {// Case 1:为空:直接返回 nullif(root == null) return null; // Case 2:有左:返左节点if(root.left != null) return root.left;// Case 3:有右:返右节点if(root.right != null) return root.right;// Case 4:左右都没有,但是有下一个节点:继续递归查找if(root.next != null) return getNext(root.next);// Case 5:摆烂,啥都没有:那就只能 null 了。return null;}
}
  • 无注释版,其实就 16 行解决!
class Solution {public Node connect(Node root) {if(root == null) return null;if(root.left != null && root.right != null) {root.left.next = root.right;}if(root.left != null && root.right == null) {root.left.next = getNext(root.next);}if(root.right != null) {root.right.next = getNext(root.next);}connect(root.right);connect(root.left);return root;}Node getNext(Node root) {if(root == null) return null;if(root.left != null) return root.left;if(root.right != null) return root.right;if(root.next != null) return getNext(root.next);return null;}
}

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

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

相关文章

r720支持多少频率的内存吗_电脑基础知识:内存条知识大全,看完小学生都了解...

一、基础知识如果你不了解内存条,如果你只知道内存容量越大越好,如果你想更加了解内存条,不妨来看看这里,今天给大家分享那些最简单也是最容易理解的内存条知识。1、定义、作用内存条又叫随机存取存储器,是一种存储技术…

关键词堆砌生成器_网络推广软件的使用和24种关键词挖掘方法

第398-399期网络推广学习,主讲课程:推广软件的使用和24种关键词的挖掘方法。具体内容如下:一、商务卫士(宣传易)主要的功能:1.商情推广2,产品添加(20个以上)3.百宝箱>…

【LeetCode笔记】299. 猜数字游戏 (Java、偏数学)

文章目录题目描述思路 && 代码题目描述 顶级阅读题!今天的每日一题,感觉评论区大佬的写法挺值得记录的,就又水了一篇答题文~ 思路 && 代码 O(n)、O(1)核心代码:Case 2 的两个 if 处理,…

currenthashmap如何实现线程安全_什么是多线程?如何实现多线程?

什么是进程?电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。比如下图中的QQ、酷狗播放器、电脑管家等等。什么是线程?进程想要执行任务就需要依赖线程。换句话说,就是进程中的…

【LeetCode笔记 - 每日一题】375. 猜数字游戏 II (Java、DFS、动态规划)

文章目录题目描述思路 && 代码DFS动态规划新系列~用于区分开高频题和每日一题~ 题目描述 一眼二分,但是实际上并不是这题让我想到社团的猜数字游戏…但是给钱是真过分了 思路 && 代码 DFS 自底向上进行递归。Math.max(…

【LeetCode笔记 - 每日一题】318. 最大单词长度乘积(Java、位运算)

文章目录题目描述思路 && 代码题目描述 挺不错!有bitmap的感觉了。 思路 && 代码 思路好想:两两对比,无公共判断,维护 res那么,如何进行公共判断?这个是主要的问题给每个字符串&#x…

技术交底软件_【干货分享】软件类产品如何进行专利挖掘与技术交底书撰写?...

“导读:在很多人的认知里,软件著作权是软件著作权,专利是专利,两者并没有太多关联。甚至有的人认为,软件产品只能申请软件著作权保护,不能申请专利保护。但是,当有人抄袭你的软件设计理念&#…

【LeetCode笔记 - 每日一题】384. 打乱数组(Java、洗牌算法)

文章目录题目描述思路 && 代码题目描述 中等题,很赞!第一次碰到涉及洗牌算法的题有点涉及概率,主要是要实现公平的随机 思路 && 代码 采用了 Knuth 洗牌算法,可以看看这篇博客时间复杂度O(N),空间…

【LeetCode笔记 - 每日一题】423. 从英文中重建数字(Java、字符串、偏思路)

文章目录题目描述思路 && 代码题目描述 看了题目以后想到啥? 字符数量统计银行家算法逐个拆解建立数字 - 字符串的全局映射 思路 && 代码 抄答案了,采取了评论区三叶dalao的写法(不得不说,人家的处理写法是真…

字符串的地址_面试题:我有一批IPv6地址,你帮我想个办法来存储?

作者:dadiyang-绪扬来源:公众号Java面试那些事儿之前写了一篇《面试题:请用代码实现ip地址与int之间互换?》,有读者评论问到 IPv6 的转换方法,于是抽时间也自己实现了一下。面试官:我有一批IPv6…

【LeetCode笔记 - 每日一题】519. 随机翻转矩阵(Java、随机、双指针)

文章目录题目描述思路 && 代码题目描述 又是涉及到均等概率的随机~ 思路 && 代码 用的题解区三叶的代码~写得是真的好!不论题目,但抄一遍代码都能觉得有收获!维度转化:并没有创造二维数…

当前操作系统缺少黑体等字体_从零开始开发一个操作系统

在2019年的最后一天终于完成了整个系统的开发,并给它起名曰——Inios 。就如同文章名字一样,完全是从内核编写,非二次开发,从最初的“hello os”到初次有了系统的样子。主要用C语言编写,部分汇编语言。。整个操作系统完…

db设计专用excel_独家|自卸车如何实现侧板结构快速设计,减少重复工作?

作者| 张凯 汉阳专用汽车研究所科研技术部工程师 主要从事专用汽车产品结构仿真与轻量化随着城市发展的步伐不断加快,适用于各种工况的自卸车、城市渣土车市场需求量不断增大。目前市场自卸车车厢主要有两种:U型车厢和普通矩形车厢。其中U型车厢自卸车&a…

python 线程退出_python线程退出

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!如果某线程并未使用很多 io 操作, 它会在自己的时间片内一直占用处理器(和 gil)。 也就是说&…

【LeetCode笔记 - 每日一题】334. 递增的三元子序列(Java、偏思路)

文章目录题目描述思路 && 代码题目描述 可以转换成300. 最长递增子序列,再看结果是否大于3但上述写法O(N)复杂度实现不了,还是得用针对这道题的写法(见下) 思路 && 代码 学习了评论区大佬的写法,…

【LeetCode笔记 - 每日一题】373. 查找和最小的 K 对数字(Java、堆、优先队列)

文章目录题目描述思路 && 代码题目描述 几天没打题,感觉脑子都是一团浆糊。。。。 升序:肯定得用这条件来优化复杂度数对:用 int[2] 来表示 思路 && 代码 看了题解区彤哥的思路,代码其实就 8 行 堆初始化&…

sql 循环处理数据_图文介绍 SQL 的三种查询计划处理模型,Spark 用了其中两个

我已经在之前的 《一条 SQL 在 Apache Spark 之旅(上)》、《一条 SQL 在 Apache Spark 之旅(中)》 以及 《一条 SQL 在 Apache Spark 之旅(下)》 这三篇文章中介绍了 SQL 从用户提交到最后执行都经历了哪些过程,感兴趣的同学可以去这三篇文章看看。这篇文章中我们主…

html调用python_flask之模板html中调用python函数方法

一:html里面可以调用python写的函数 add_template_global(调用函数的引用,"调用函数的名字") from common.libs.UrlManager importUrlManager app.add_template_global(UrlManager.buildStaticUrl,"buildStaticUrl…

【学习笔记】《The Linux Command Line》第一部分 1 - 11 章(shell、进程、重定向、命令等)

《The Linux Command Line》读书笔记 文章目录《The Linux Command Line》读书笔记第一章 略第二章 Shell第三章 文件系统第四章 探究OS第五章 操作文件和目录第六章 使用命令第七章 重定向第八章 Shell第九章 快捷键第十章 权限第十一章 进程第一章 略 第二章 Shell Shell: …

md5值是什么意思_详解:PER?霍林格效率值?这个最火的高阶数据究竟是什么意思?...

北京时间6月19日我们以前看球的时候,不关心什么高阶数据,顶多就是在聊天讨论的时候用得分、篮板、助攻、抢断、盖帽等数据来说事,但打内心更喜欢的是一场完整的比赛中的一些能够让人肾上腺素飙升的东西。后来就有人开始罗列数据,把…