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

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

时间:2023-05-29 23:32:06浏览次数:43  
标签:node yyds 金典 deep next que resList tmpNode 节点

题目:

给定一个二叉树:

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 = []

输出:[]

代码实现:

// 102.二叉树的层序遍历
class Solution {
    public List<List<Integer>> resList = new ArrayList<List<Integer>>();

    public List<List<Integer>> levelOrder(TreeNode root) {
        //checkFun01(root,0);
        checkFun02(root);

        return resList;
    }

    //DFS--递归方式
    public void checkFun01(TreeNode node, Integer deep) {
        if (node == null) return;
        deep++;

        if (resList.size() < deep) {
            //当层级增加时,list的Item也增加,利用list的索引值进行层级界定
            List<Integer> item = new ArrayList<Integer>();
            resList.add(item);
        }
        resList.get(deep - 1).add(node.val);

        checkFun01(node.left, deep);
        checkFun01(node.right, deep);
    }

    //BFS--迭代方式--借助队列
    public void checkFun02(TreeNode node) {
        if (node == null) return;
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(node);

        while (!que.isEmpty()) {
            List<Integer> itemList = new ArrayList<Integer>();
            int len = que.size();

            while (len > 0) {
                TreeNode tmpNode = que.poll();
                itemList.add(tmpNode.val);

                if (tmpNode.left != null) que.offer(tmpNode.left);
                if (tmpNode.right != null) que.offer(tmpNode.right);
                len--;
            }

            resList.add(itemList);
        }

    }
}

标签:node,yyds,金典,deep,next,que,resList,tmpNode,节点
From: https://blog.51cto.com/u_13321676/6374677

相关文章

  • hdu 2874(LCA + 节点间距离)
    解题思路:Tarjan离线处理一篇介绍LCA的很好的博客:http://www.cppblog.com/menjitianya/archive/2015/12/10/212447.html#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;constintmaxn=10005;structEdge{ intk,next,cost;}edge[maxn&......
  • Java-Day-25( 字节输入流 + FileInputStream 和 FileOutputStream + FileReader 和 Fi
    Java-Day-25InputStream(字节输入流)InputStream抽象类是所有类字节输入流的超类InputStream常用的子类FileInputStream:文件输入流BufferedInputStream:缓冲字节输入流ObjectInputStream:对象字节输入流FileInputStream和FileOutputStreamFileInputStream(文......
  • hdu 5102(队列+节点扩展)
    TheK-thDistanceTimeLimit:8000/4000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)ProblemDescriptionGivenatree,whichhasnnodeintotal.Definethedistancebetweentwonodeuandvisthenumberofedgeontheirunique......
  • VST实例(5)节点(NODE) 二、节点的遍历
    二、节点的遍历每一个节点都有一个index值,用于描述其在相同level,相同父节点下的序号,但是,遍历时并不能利用这个值,因为这个值是变化的,当进行排序,插入节点、删除节点等等操作时,这个index会发生改变。同样的,vst.AbsoluteIndex(node)返回的是某一节点在VST中的绝对序号,也会在排序等......
  • VST实例(6) 节点(NODE) 特殊节点和节点的增减
    这一部分在程序中并未直接使用,只是对VST的一些特性进行讲解,不喜欢的可以跳过。三、特殊节点1、RootnodepropertyRootNode:PVirtualNode;rootnode不是一个具体的节点,是为了锚定树的层次结构,维护的一个内部树节点,这个节点大部分情况下与其他树节点一样,但有时会有不同的处理。......
  • K8s部署单节点Zookeeper并进行监控
    0、写在前面1>K8s监控Zookeeper,这里并没有使用zookeeper-exporter的方式进行监控,主要是由于zookeeper-exporter提供的相关指标不太全,zookeeper官网提供的监控指标信息可参看如下地址:https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/ap......
  • #yyds干货盘点# LeetCode程序员面试金典:填充每个节点的下一个右侧节点指针
    题目:给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:structNode{ intval; Node*left; Node*right; Node*next;}填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为NUL......
  • #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,......