首页 > 其他分享 >力扣中116 填充每个节点的下一个右侧节点指针

力扣中116 填充每个节点的下一个右侧节点指针

时间:2023-03-08 19:55:06浏览次数:45  
标签:Node val int public 力扣 116 new root 节点

题解1:

 

 也就是一下就把队列里所有的元素移除了 移除的同时添加左右节点 队列中每次放的都是一层

 

题解2:

找到next可以利用next找下一节点

用pre标记每层第一个 tmp标记当前作用的 处理当前节点的左右

 

题解3 递归 左往右右往左连接 再dfs左右子树

 

 

 

 

 

 

 

 

没啥想法 想一次性一个循环就做完这个工作 但是写不出来 所以就先写了个垃圾版本

package Leetcode;

import java.util.LinkedList;
import java.util.Queue;

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;
    }
};

public class Leetcode116 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Node root= new Node(1,new Node(2,new Node(4),new Node(5),null),new Node(3,new Node(6),new Node(7),null), null);
        Leetcode116.connect(root);
    }
    //深度还是不会
    public static Node connect(Node root) {
        Node temp=root;
        Queue<Node> queue=new LinkedList<Node>();
        Queue<Node> queueres=new LinkedList<Node>();
        int layer=1;//用来标记每层需要加的指针个数
        int count=0;//标记已经遍历过的节点
        if(root==null){//这个不加 对于空树会出错
            return root;
        }
        queue.add(root);
        while(!queue.isEmpty()) {
            temp=queue.poll();
            queueres.add(temp); //只要移除就压入下一个
            if(temp.left!=null) {
                queue.add(temp.left);
                queue.add(temp.right);
            }
        }
        int len=queueres.size(); //原来直接把这个放在for循环里面 导致queueres不断移除会使得for提前终止
        for(int i=0;i<len;i++) {
            temp=queueres.poll();
            count++;
 
            if((count+1)%(int)Math.pow(2,layer)==0) {
                temp.next=null;
                layer++;
            }
            else {
                temp.next=queueres.peek();
            }           
        }    
        return root;
    }

}

 

标签:Node,val,int,public,力扣,116,new,root,节点
From: https://www.cnblogs.com/ayuanjiejie/p/17195885.html

相关文章

  • E90-DTU系列无线数传电台网关与节点4gDTU通信教程
    以E90-DTU(400SL22-ETH)与E90-DTU(400SL22)为例实现网关与节点进行数据交换,其它频段或功率的网关/节点,其操作方式与该视频教程一致。第一步【安装网关】为网关安装天线电源......
  • E90-DTU系列无线数传电台网关与节点4gDTU通信教程
    以E90-DTU(400SL22-ETH)与E90-DTU(400SL22)为例实现网关与节点进行数据交换,其它频段或功率的网关/节点,其操作方式与该视频教程一致。第一步【安装网关】为网关安装天线电源......
  • vue 过滤 懒加载 使用elementUI实现树懒加载与节点过滤功能
    vue使用elementUI实现树懒加载功能以及节点过滤 1.过滤:设置filter-node-method,值为过滤函数。2.懒加载:点击节点时才进行该层数据的获取 <el-inputplaceholder......
  • 力扣---64. 最小路径和
    给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例1:输入:grid=[[1,3,1......
  • 力扣简617 合并二叉树
    一遍过欸但是没捋清楚所以写了好半天不过运行速度很差我发现我只会广度优先这题深度憨简单   classSolution{publicTreeNodemergeTrees(TreeNoder......
  • 力扣---709. 转换成小写字母
    给你一个字符串s,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。示例1:输入:s="Hello"输出:"hello"示例2:输入:s="here"输出:"here"示例3:输入:s="LOVELY"......
  • Node节点
    Node节点还有其他叫法Woker节点,minion节点 Node节点上主要安装两个软件:   Kubelet:   负责监听借调上pod状态,同时负责上报节点和节点上面的pod状态,负责与Mas......
  • 116、tail+grep命令——2023年3月7日10:01:06
    2023年2月20日14:50:371、tail基本命令tail命令.因为查看日志通常从后面最新的日志去看,tail命令就是从后往前找.比如下述命令会显示access.log的最后10行的内......
  • Hadoop节点的分类与作用
    目录文件的数据类型NameNode(NN)功能性能DataNode(DN)功能SecondaryNameNode传统解决方案SNN解决方案节点的分类与作用汇总图文件的数据类型文件有一个stat命令元数据......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),nex......