LeetCode-116-填充每个节点的下一个右侧节点指针

news2024/11/15 21:09:02

在这里插入图片描述

一:题目描述:

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

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

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

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

二:示例与提示

示例 1:

image-20230725162158327

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

示例 2:

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

提示:

  • 树中节点的数量在 [0, 212 - 1] 范围内
  • -1000 <= node.val <= 1000

三:思路

广度优先搜索

  • 层序遍历,找到每层的元素将其依次顺次的连接
  • 就需要知道该node节点的前一个或者后一个节点

四:代码

/**
 * // Definition for a Node.
 * function Node(val, left, right, next) {
 *    this.val = val === undefined ? null : val;
 *    this.left = left === undefined ? null : left;
 *    this.right = right === undefined ? null : right;
 *    this.next = next === undefined ? null : next;
 * };
 */

/**
 * @param {Node} root
 * @return {Node}
 */
var connect = function(root) {
    //层序遍历
    if(!root) return root
    let queue = []
    queue.push(root)
    while(queue.length){
        let length = queue.length
        for(let i = 0; i < length; i++){
            let node = queue.shift()
            //让弹出的node 连接 队列的第一个元素 即是层次中的元素依次相连
            if(i < length-1){
                node.next = queue[0]
            }
            if(node.left) queue.push(node.left)
            if(node.right) queue.push(node.right)
        }
    }
    return root
};

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

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

相关文章

Flutter 的线程模型和异步原理

本文字数&#xff1a;&#xff1a;36130字 预计阅读时间&#xff1a;91分钟 在Android应用中&#xff0c; 用户时常会遇到界面卡顿的情况&#xff0c;非常影响用户的体验。作为Android开发肯定都知道&#xff1a;应用在主线程里做了大量的耗时操作(例如文件读写&#xff0c; 数…

新一代网络安全防护体系的五个关键特征

目前&#xff0c;网络安全技术正面临着一个转折点&#xff0c;基于边界的安全防护理论存在缺陷&#xff0c;基于规则的威胁判别机制不再有效&#xff0c;围绕传统技术构建的安全工程也不再适用。新一代安全建设不能再像修“城墙”一样&#xff0c;专注于外部网络攻击和已知威胁…

C++:类和对象(中)---默认成员函数---运算符重载---const的含义

文章目录 默认成员函数构造函数析构函数拷贝构造函数运算符重载赋值运算符重载const的含义取地址及const取地址操作符重载 默认成员函数 首先要理解什么是默认成员函数&#xff1a;类在什么都不写的时&#xff0c;编译器会生成六个默认成员函数 用户没有显式实现&#xff0c;但…

谁能讲清楚Spark之小白入门

在这我假设大家都是小白&#xff0c;那么Spark是什么&#xff1f;你为什么搜索它&#xff1f;思考一下。 首先&#xff0c;Spark是大数据处理框架的一种&#xff0c;那么什么是大数据处理框架&#xff1f;什么是大数据&#xff1f;字面意思懂得都懂。&#xff08;如果不懂去百度…

网络安全代码合集

SQL注入 联合注入 ?id1and 11-- - ?id1order by 1-- - ?id-1union select 1,2,3-- - ?id-1union select 1,database(),3-- - ?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase() -- - ?id-1 union sele…

Docker啥是容器编排?

文章目录 容器编排compose案例wordpress案例swarmKubernetes特点 容器编排 Docker容器编排是一种管理和协调多个Docker容器的技术&#xff0c;旨在简化容器化应用程序的部署、扩展和管理。在现代应用开发中&#xff0c;容器化已经成为一种流行的部署方式&#xff0c;Docker是其…

A Deep Framework for Hyperspectral Image Fusion Between Different Satellites

1.摘要 最近&#xff0c;将低分辨率高光谱图像&#xff08;LR-HSI&#xff09;与不同卫星的高分辨率多光谱图像&#xff08;HR-MSI&#xff09;融合已成为提高HSI分辨率的有效方法。然而&#xff0c;由于不同的成像卫星、不同的照明条件和相邻的成像时间&#xff0c;LR-HSI和H…

15.Netty源码之EventLoop

highlight: arduino-light Netty配置主从Reactor模式 通过将NioServerSocketChannel绑定到了bossGroup。 将NioServerSocketChannel接收到请求创建的SocketChannel放入workerGroup。 将2个不同的SocketChannel绑定到2个不同的Group完成了主从 Reactor 模式。 分配NIOEventLoop的…

【Git|项目管理】Git的安装以及本地仓库的创建和配置

文章目录 1.Git简介2.安装Git2.1在Centos上安装git2.2 在ubuntu上安装git 3.创建本地仓库4.配置本地仓库 1.Git简介 Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理文件的更改。它可以记录和存储代码的所有历史版本&#xff0c;并可以方便地进行分支管理、合并代码和协…

JavaScript中的this指向及绑定规则

在JavaScript中&#xff0c;this是一个特殊的关键字&#xff0c;用于表示函数执行的上下文对象&#xff0c;也就是当前函数被调用时所在的对象。由于JavaScript的函数调用方式多种多样&#xff0c;this的指向也因此而变化。本文将介绍JavaScript中this的指向及绑定规则&#xf…

【LeetCode】141.环形链表

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…

M.2 接口

M.2 接口 简介 M.2模块卡口类型 常用硬盘接口 • B key&#xff1a;传输模式为PCI-E 2X或SATA&#xff0c;用于SSD或WWAN • M Key&#xff1a;传输模式为PCI-E 4X或SATA&#xff0c;传输速率达到4GB/s&#xff0c;应用于NVMe PCIe M.2 SSD等。 接口类型 常用硬盘尺寸 M.2设…

sed命令替换 M-BM- 不可见字符 解决脚本或配置文件粘贴后莫名其妙的报错

在使用shell脚本、编辑配置文件时&#xff0c;如果是直接复制&#xff0c;有时会莫名其妙报错。 使用cat -A查看文件&#xff0c;可以看到非常多的 M-BM- 不可见字符 挤占在空格位&#xff0c;正是这些字符导致脚本或配置文件的读取出错、 使用sed命令将文件内的 M-BM- 不可见…

C# IO 相关功能整合

目录 删除文件和删除文件夹 拷贝文件到另一个目录 保存Json文件和读取Json文件 写入和读取TXT文件 打开一个弹框&#xff0c;选择 文件/文件夹&#xff0c;并获取路径 获取项目的Debug目录路径 获取一个目录下的所有文件集合 获取文件全路径、目录、扩展名、文件名称 …

原生js vue react通用的递归函数

&#x1f642;博主&#xff1a;锅盖哒 &#x1f642;文章核心&#xff1a;原生js vue react通用的递归函数 目录大纲 1.递归函数的由来 2.代码逻辑 1.递归函数的由来 递归函数的由来可以追溯到数学中的递归概念和数学归纳法。 在数学中&#xff0c;递归是指通过定义基本情况和…

windows切换php版本以及composer

前提 安装php8.2 安装Php7.4 下载 nts是非线程安全的&#xff0c;这里选择线程安全的&#xff0c;选择64位 解压缩 修改系统环境变量 修改为php-7的 cmd中输入php -v查看 找到composer存放路径C:\ProgramData\ComposerSetup\bin 将三个文件复制到php目录下 重启电脑…

flink采用thrift读取tablets一个天坑

原先的配置 [INFO] StarRocksSourceBeReader [open Scan params.mem_limit 8589934592 B] [INFO] StarRocksSourceBeReader [open Scan params.query-timeout-s 600 s] [INFO] StarRocksSourceBeReader [open Scan params.keep-alive-min 100 min] [INFO] StarRocksSourceBeRea…

中间件安全-CVE漏洞复现-Docker+Websphere+Jetty

中间件-Docker Docker容器是使用沙盒机制&#xff0c;是单独的系统&#xff0c;理论上是很安全的&#xff0c;通过利用某种手段&#xff0c;再结合执行POC或EXP&#xff0c;就可以返回一个宿主机的高权限Shell&#xff0c;并拿到宿主机的root权限&#xff0c;可以直接操作宿主机…

【图论】Prim算法

一.介绍 Prim算法是一种用于解决最小生成树问题的贪心算法。最小生成树问题是指在一个连通无向图中找到一个生成树&#xff0c;使得树中所有边的权重之和最小。 Prim算法的基本思想是从一个起始顶点开始&#xff0c;逐步扩展生成树&#xff0c;直到覆盖所有顶点。具体步骤如下…

【Ansible】

目录 一、Ansible简介二、ansible 环境安装部署1、管理端安装 ansible 三、ansible 命令行模块&#xff08;重点&#xff09;1&#xff0e;command 模块2&#xff0e;shell 模块3、cron 模块4&#xff0e;user 模块5&#xff0e;group 模块6&#xff0e;copy 模块&#xff08;重…