Leetcode算法二叉树—117. 填充每个节点的下一个右侧节点指针 II(层序遍历/队列)

目录

117. 填充每个节点的下一个右侧节点指针 II - 力扣(LeetCode)

题解:

代码:

运行结果: ​编辑


给定一个二叉树:

struct Node {int val;Node *left;Node *right;Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。

初始状态下,所有 next 指针都被设置为 NULL 。

示例 1:

输入:root = [1,2,3,4,5,null,7]
输出:[1,#,2,3,#,4,5,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。

示例 2:

输入:root = []
输出:[]

提示:

  • 树中的节点数在范围 [0, 6000] 内
  • -100 <= Node.val <= 100

题解:

  • 定义了一个connect()方法,接受一个Node类型的参数root,表示二叉树的根节点。如果根节点为空,直接返回。然后创建一个队列queue,用于层序遍历二叉树。
  • 接下来,将根节点入队。
  • 进入循环,只要队列不为空,就继续执行。在每一轮循环中,先获取当前层级上的节点个数size,并将上一个处理的节点last和当前节点node初始化为null。
  • 然后,在内层循环中,通过出队操作弹出一个节点node。如果上一个节点last不为空,将其next指针指向当前节点node,实现相邻节点的连接。
  • 同时,如果当前节点的左子节点不为空,则将其左子节点入队;如果当前节点的右子节点不为空,则将其右子节点入队。
  • 最后,更新last为当前节点node,以备下一次循环使用。
  • 当所有节点都遍历完毕后,返回根节点root即可。
  • 这段代码的核心思想是利用队列进行层序遍历,并在遍历过程中连接相邻节点。通过这种方式,可以实现二叉树节点的"下一个右侧节点"连接。

代码:

/*
// 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 {public Node connect(Node root) {if(root==null) return root;// 定义队列用于层序遍历Queue<Node> queue=new LinkedList<>();// 根节点进队queue.offer(root);Node last;//上一个队首Node node;//当前队首int size=0;while(!queue.isEmpty()){//通过队列的size横向控制每层的遍历size=queue.size();last=null;//每一层开始的上一个节点为空while(size>0){// 获取队首(由于只能获取队首而不是前两个,所以我们用提前存储上一个节点与当前获取的队首链接)node=queue.poll();//获取当前节点if(last!=null) last.next=node;//不为空说明他们是一层的,连接起来if(node.left!=null) queue.offer(node.left);//子节点入队if(node.right!=null) queue.offer(node.right);last=node;size--;}}return root;}
}

运行结果: 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2023-09-21 buildroot linux 查看应用的log打印信息,命令cat /var/log/messages

一、应用会调用syslog 把打印信息输出到串口&#xff0c;debug 串口会打印kernel的log和上层应用的的log。 二、linux 命令cat /var/log/messages查看应用log

【常用代码15】文字单词超出强制分割换行,word-break: break-all;和word-wrap: break-word;的区别

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 文件上传后显示文件名&#xff0c;名称过长&#xff0c;超出div 有些文件名如下图 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 一般图片上传&#xff0c;要展示文件名&#x…

基于Springboot实现毕业生信息招聘平台管理系统演示【项目源码+论文说明】分享

基于Springboot实现毕业生信息招聘平台管理系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台&#xff0c;主要的模块包括查看管理员&#xff1b;首页、个人中心、企…

预制菜行业数据分析(京东数据挖掘)

最近一段时间&#xff0c;关于预制菜进校园事件的讨论热度高涨。而这两天&#xff0c;核酸大王“张核子”转行开预制菜公司卖方便米饭的消息又被传出&#xff0c;直接让预制菜市场饱受关注。 “预制菜是近两年的风口”&#xff0c;这个结论鲸参谋早在以往的内容中专门讨论过&a…

自学WEB后端03-Node.js 语法

学习后端路线&#xff1a; JavaScript 基础语法 Node,js 内置 API 模块 (fs、 path、 http等) 第三方 API 模块 (express、mysql等) 今天主要回顾下Node.js 语法 Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它提供了一种能够在服务器端运行 JavaScr…

前端求职指南

简历求职指南 为什么没有面试&#xff1f; 1、简历写的不好 2、简历投递不好 简历的定义是什么&#xff1f; 是求职者向未来雇主展示自己专业技能和职业素养的自我推销工具&#xff0c;以找到工作为目的。 什么时候改简历&#xff1f; 每半年或一年更新一次工作中的成长 再工…

Open3D 进阶(12)PCA拟合平面

目录 一、算法原理二、代码实现三、结果展示四、优秀博客本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 本文实现基于主成分分析方法的最小二乘拟合平面。原理如下: 针对整个点云 P = { p i }

torch.sum()——dim参数

dim指在dim的这个维度上&#xff0c;对tesnor 进行求和&#xff0c;如果keepdim&#xff08;保持维度&#xff09;False&#xff0c;返回结果会删去dim所指的这个维度。以下面的例子分析dim的参数~ torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(…

如何兼顾性能+实时性处理缓冲数据?

们经常会遇到这样的数据处理应用场景&#xff1a;我们利用一个组件实时收集外部交付给它的数据&#xff0c;并由它转发给一个外部处理程序进行处理。考虑到性能&#xff0c;它会将数据存储在本地缓冲区&#xff0c;等累积到指定的数量后打包发送&#xff1b;考虑到实时性&#…

Linux Ubuntu配置Git的方法

本文介绍在Linux操作系统的Ubuntu版本中&#xff0c;配置分布式开源版本控制系统Git&#xff0c;随后基于Git克隆GitHub中项目的代码的详细方法。 在之前的文章分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法&#xff08;https://blog.csdn.net/zhebushib…

区块链实验室(27) - 区块链+物联网应用案例

分享最新的区块链物联网应用案例&#xff1a;HPCLS-BC

HTML详细基础(一)H5标签入门

本帖为B站网课黑马程序员的学习笔记&#xff0c;总结了H5最核心的概念性质&#xff0c;适用于初学者或者应对期末考试的群体~ 目录 一.Html简介 二.开发工具 三.基础标签 1.核心基础 2.标题标签 3.段落标签 ​编辑 4.文本格式标签 5.盒子标签 6.图片标签 一.Html简介 H…

索引的数据结构

文章目录 索引的数据结构1. 为什么使用索引2 索引及其优缺点2.1 索引概述2.2 索引优点 3. InnoDB中索引的推演 索引的数据结构 1. 为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;如书的目录&#xff0c;通过目录找到对应文章的页码&#xff0…

ternsor合并与分割

拼接&#xff1a;拆分&#xff1a;Cat、StackSplit、Chunk 1、cat&#xff08;concat&#xff09; 统计班级学生成绩&#xff1a; [class1-4, students, scores] [class5-9, students, scores] 将这九名学生的成绩进行合并 a torch.rand(4, 32, 8) b torch.rand(5, 32, 8…

特种设备安全监测终端,降低安全隐患风险!

特种设备运行关系到人民生命财产安全&#xff0c;关系到经济健康发展&#xff0c;关系到社会的稳定。有关特种设备的事故基本都发生在使用过程中&#xff0c;因此&#xff0c;使用过程的安全管理是特种设备的管理重点。针对国内特种设备本身存在事故隐患及安装、维修、操作、指…

知识工程---neo4j 5.12.0+GDS2.4.6安装

&#xff08;已安装好neo4j community 5.12.0&#xff09; 一. GDS下载 jar包下载地址&#xff1a;https://neo4j.com/graph-data-science-software/ 下载得到一个zip压缩包&#xff0c;解压后得到jar包。 二. GDS安装及配置 将解压得到的jar包放入neo4j安装目录下的plugi…

java中使用redis2个库并支持Redis哈希表

一个redis实例&#xff0c;默认包含16个库&#xff0c;序号从0到15。在redis命令行中&#xff0c;可以用select 序号来切换。我最近在做的一个项目中&#xff0c;需要使用redis的2个库。一个是由其他子系统写入&#xff0c;web后端&#xff08;java&#xff09;只读取&#xff…

Selenium自动化测试 —— 通过cookie绕过验证码的操作!

验证码的处理 对于web应用&#xff0c;很多地方比如登录、发帖都需要输入验证码&#xff0c;类型也多种多样&#xff1b;登录/核心操作过程中&#xff0c;系统会产生随机的验证码图片&#xff0c;进行验证才能进行后续操作 解决验证码的方法如下&#xff1a; 1、开发做个万能…

java: 通过xml模板转成word文件

依赖: freemarker <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version> <!-- 请根据您的需求选择最新版本 --></dependency> 代码展示 import freemarker.t…