首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:填充每个节点的下一个右侧节点指针

#yyds干货盘点# LeetCode程序员面试金典:填充每个节点的下一个右侧节点指针

时间:2023-05-28 21:01:59浏览次数:49  
标签:Node yyds node 金典 next queue root 节点

题目:

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

struct Node {

 int val;

 Node *left;

 Node *right;

 Node *next;

}

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

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

 

示例 1:

输入:root = [1,2,3,4,5,6,7]

输出:[1,#,2,3,#,4,5,6,7,#]

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

示例 2:

输入:root = []

输出:[]

代码实现:

class Solution {
    public Node connect(Node root) {
        if (root == null) {
            return root;
        }
        
        // 初始化队列同时将第一层节点加入队列中,即根节点
        Queue<Node> queue = new LinkedList<Node>(); 
        queue.add(root);
        
        // 外层的 while 循环迭代的是层数
        while (!queue.isEmpty()) {
            
            // 记录当前队列大小
            int size = queue.size();
            
            // 遍历这一层的所有节点
            for (int i = 0; i < size; i++) {
                
                // 从队首取出元素
                Node node = queue.poll();
                
                // 连接
                if (i < size - 1) {
                    node.next = queue.peek();
                }
                
                // 拓展下一层节点
                if (node.left != null) {
                    queue.add(node.left);
                }
                if (node.right != null) {
                    queue.add(node.right);
                }
            }
        }
        
        // 返回根节点
        return root;
    }
}

标签:Node,yyds,node,金典,next,queue,root,节点
From: https://blog.51cto.com/u_13321676/6366422

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:二叉搜索树迭代器
    1.简述:实现一个二叉搜索树迭代器类BSTIterator,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNoderoot)初始化BSTIterator类的一个对象。BST的根节点root会作为构造函数的一部分给出。指针应初始化为一个不存在于BST中的数字,且该数字小于BST中的任何元素。b......
  • Linux 常用命令大全【yyds干货盘点4】
    1. 文本处理catfile1file2...|command<>file1_in.txt_or_file1_out.txtgeneralsyntaxfortextmanipulationusingPIPE,STDINandSTDOUTcatfile1|command(sed,grep,awk,grep,etc...)>result.txt合并一个文件的详细说明文本,并将简介写入一个新文件中ca......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉树展开为链表
    题目:给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。 示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,4,......
  • 查找xml cdata 节点并去掉 CDATA 节点标记
    内容如下<?xmlversion="1.0"encoding="UTF-8"?><transstatus><transname>C-QXZSPJ-QXZSPJ-015-1</transname><id>2ca8df47-3b2d-4d8f-8b70-be68448dd97d</id><status_desc>Finished</status......
  • 动力节点Docker实战入门教程(4)Docker容陈可人
    根据B站上动力节点的最新版Docker教程整理了学习笔记,持续更新中~4Docker容器4.1容器基础4.1.1容器启动流程通过dockerrun命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的镜像,如果找到了,则直接启动,否则会到镜像中心查找。如果镜像中心存在该镜像,则会下载到本地......
  • Linux 常用命令大全【yyds干货盘点3】
    1.RPM包-(Fedora,Redhat及类似系统)rpm-ivhpackage.rpm安装一个rpm包rpm-ivh--nodeepspackage.rpm安装一个rpm包而忽略依赖关系警告rpm-Upackage.rpm更新一个rpm包但不改变其配置文件rpm-Fpackage.rpm更新一个确定已经安装的rpm包rpm-epackage_name.rpm......
  • #yyds干货盘点#TCP的报文格式
    TCP的报文格式源端口号:本次TCP连接中,发起连接的主机使用的端口号;目的端口号:本次TCP连接主,接受连接的主机使用的端口号;序号:通过TCP传输的每一个数据段,都有一个序号,作用是为了确认此数据段的顺序。网络中允许传输的数据长度是有限制的,所以当我们要通过TCP传输一个较大的数据时,TCP会将......
  • #yyds干货盘点# LeetCode程序员面试金典:路径总和 II
    题目:给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。 示例1:输入:root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22输出:[[5,4,11,2],[5,8,4,5]]示例2:输入:root=......
  • #yyds干货盘点# LeetCode程序员面试金典:多数元素
    1.描述:给定一个大小为n的数组 nums,返回其中的多数元素。多数元素是指在数组中出现次数大于 ⌊n/2⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1:输入:nums=[3,2,3]输出:3示例 2:输入:nums=[2,2,1,1,1,2,2]输出:22.代码实现:classSolution{......
  • 2.Redis的安装与配置-动力节点Redis7笔记
    2Redis的安装与配置这里是要将Redis安装到Linux系统中。2.1Redis的安装2.1.1克隆并配置主机修改主机名:/etc/hostname修改网络配置:/etc/sysconfig/network-scripts/ifcfg-ens332.1.2安装前的准备工作2.1.2.1安装gcc由于Redis是由C/C++语言编写的,而从官网下载的Redis......