填充每个节点的下一个右侧节点指针 II

题目链接

填充每个节点的下一个右侧节点指针 II

题目描述

注意点

  • 初始状态下,所有 next 指针都被设置为NULL
  • 如果找不到下一个右侧节点,则将 next 指针设置为NULL

解答思路

  • 首先想到的是层序遍历,将每一层的节点存储在队列中,根据队列先进先出的特点将节点弹出并指向下一个节点
  • 参照题解可以利用已有的next进行层序遍历而不需要使用额外O(n)的空间存储每一层的节点,思路为:根据next指针遍历第i层时,可以根据将该层节点的左右子树从左到右更新第i + 1层的next指针,同时存储第i + 1层的第一个节点,方便下一层进行遍历

代码

方法一:

class Solution {public Node connect(Node root) {if (root == null) {return root;}Node res = root;Deque<Node> deque = new ArrayDeque<>();deque.offerFirst(root);while (!deque.isEmpty()) {int len = deque.size();for (int i = 0; i < len; i++) {Node node = deque.pollLast();if (node.left != null) {deque.offerFirst(node.left);}if (node.right != null) {deque.offerFirst(node.right);}node.next = (i < len - 1) ? deque.peekLast() : null;}}return res;}
}

方法二:

class Solution {public Node connect(Node root) {if (root == null) {return root;}Node res = root;// 最初指向每一层的第一个节点,遍历每层所有节点Node node = root;while (node != null) {// 下一层的第一个节点Node nextFirstNode = null;Node nextNode = new Node();while (node != null) {if (nextFirstNode == null) {nextFirstNode = node.left != null ? node.left : node.right;}if (node.left != null) {nextNode.next = node.left;nextNode = nextNode.next;}if (node.right != null) {nextNode.next = node.right;nextNode = nextNode.next;}node = node.next;}node = nextFirstNode;}return res;}
}

关键点

  • 层序遍历的过程
  • 注意节点为null的判断

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

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

相关文章

鸿蒙文章专题-2021年鸿蒙相关的文章废弃

#原因 至于为什么说2021年我的鸿蒙专栏的文章废弃了&#xff0c;只是说没有了参考意义&#xff0c;是因为鸿蒙4.0以前的版本语言从以Java为主过渡为以ArkTS为主。以前的Java版本的工程已经无法再使用了&#xff0c;后续的开发都必须以ArkTS开发语言为主。 其中而且整个项目结构…

【硬件工程师面经整理21_其它】

文章目录 1 为何电源的滤波电路常常是大电容配合小电容滤波2 小信号敏感信号是什么&#xff0c;如何保护敏感信号3 555定时器4 CMOS不用输入管脚该怎么处理。5 为什么一个标准的倒相器中 P 管的宽长比要比 N 管的宽长比大&#xff1f;6 S11和反射系数和插损的关系7 眼图的功能8…

【Spring高级】第2讲:容器实现类

目录 BeanFactory实现BeanDefinition后置处理器单例bean创建后置处理器顺序总结 ApplicationContext实现ClassPathXmlApplicationContextFileSystemXmlApplicationContextAnnotationConfigApplicationContextAnnotationConfigServletWebServerApplicationContext BeanFactory实…

【论文阅读】单词级文本攻击TAAD2.2

TAAD2.2论文概览 0.前言1-101.Bridge the Gap Between CV and NLP! A Gradient-based Textual Adversarial Attack Frameworka. 背景b. 方法c. 结果d. 论文及代码 2.TextHacker: Learning based Hybrid Local Search Algorithm for Text Hard-label Adversarial Attacka. 背景b…

JavaScript极速入门(1)

初识JavaScript JavaScript是什么 JavaScript(简称JS),是一个脚本语言,解释型或者即时编译型语言.虽然它是作为开发Web页面的脚本语言而著名,但是也应用到了很多非浏览器的环境中. 看似这门语言叫JavaScript,其实在最初发明之初,这门语言的名字其实是在蹭Java的热度,实际上和…

常用设计模式详解

设计模式 1.UML图 统一建模语言是用来设计软件的可视化建模语言。定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。 1.1类图 1.1.1类的表示方式 在UML类图中&#xff0c;类使用包含类名、属性(field) 和方法(method) 且带有分割线…

二维码门楼牌管理系统应用场景:赋能市场研究与城市决策的新动力

文章目录 前言一、市场研究的新视角&#xff1a;门牌数据揭示市场趋势二、城市规划的得力助手&#xff1a;门牌数据指导资源分配三、决策制定的科学依据&#xff1a;门牌数据提升决策准确性四、未来展望&#xff1a;二维码门楼牌管理系统的更多可能性 前言 随着信息技术的飞速…

电脑工作电压是多少你要看看光驱电源上面标的输入电压范围

要确定电脑的工作电压&#xff0c;必须查看电源上标注的输入电压范围。 国内法规规定民用220V电压范围为10%-15%&#xff0c;也就是说通信220V电压正常范围为187--242V&#xff0c;供电设备一般为180V。 --250V电压范围&#xff0c;即正常情况下电脑电源电压不低于187V即可工作…

基于单片机的电梯控制系统设计

目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 设计原理 3 1.2 系统设计方案 3 2 硬件电路的设计 7 2.1 主控制模块 7 2.2 单片机的最小系统 8 2.3 电源电路 9 2.4 电梯呼叫按键电路 9 2.5 楼层显示和楼层指示电路 9 2.6 电梯上下指示电路 10 2.7 防夹模块电路 10 …

无编制教师和有编制教师区别在哪

走进教育的世界&#xff0c;我们常常听到“编制教师”与“非编制教师”的说法&#xff0c;这两者之间的区别&#xff0c;犹如一道隐形的鸿沟&#xff0c;隔开了两种不同的教育生涯。今天&#xff0c;就让我们一起来探讨一下&#xff0c;这两者之间的差异究竟体现在哪里。 教育系…

超时检测、抓包分析、数据库

#include <myhead.h>//定义添加员工信息函数 int Add_worker(sqlite3 *ppDb) {//准备sql语句printf("请输入要添加的员工信息:\n");//从终端获取员工信息char rbuf[128]"";fgets(rbuf,sizeof(rbuf),stdin);rbuf[strlen(rbuf)-1]0;char sql[128]"…

一次一对一服务引起的沉思和笑话(微信号Stefan)

前情提要 客户需求&#xff1a; 分析页面代码和接口请求协议和参数需求&#xff0c;将人工下载视频怎么获得最终的视频链接&#xff0c;这一逻辑清晰的展示并讲解清除。我询问了是否需要成品爬虫&#xff0c;他说代码他自己能搞定。 我给的价格选择&#xff1a; 第一种、首…