【LeetCode-中等题】116. 填充每个节点的下一个右侧节点指针

文章目录

题目

方法一:直接让每层不是最后一个的节点指向此时队首元素

java 复制代码
class Solution {
    public Node connect(Node root) {
        if(root == null) return null;
        Deque<Node> queue = new LinkedList<>();
        Node node = root;
        queue.offer(node);
        List<Node> list = null;
        while(!queue.isEmpty()){
            int size = queue.size();
            list = new ArrayList<>();
            for(int i = 0 ; i < size ; i++){
                node = queue.poll();
                //第二种链接方法  :  直接让每层不是最后一个的节点指向此时队首元素
                if(i == size - 1) node.next = null;//每层最后一个指向 null
                else node.next = queue.peek();//不是最后一个的节点指向此时队首元素
                if(node.left != null) queue.offer(node.left);
                if(node.right != null) queue.offer(node.right);
            }
        }
        return root;
    }
}

方法二:用list记录下每层的节点 然后再做链接

java 复制代码
class Solution {
    public Node connect(Node root) {
        if(root == null) return null;
        Deque<Node> queue = new LinkedList<>();
        Node node = root;
        queue.offer(node);
        List<Node> list = null;
        while(!queue.isEmpty()){
            int size = queue.size();
            list = new ArrayList<>();
            for(int i = 0 ; i < size ; i++){
                node = queue.poll();
                list.add(node);
                if(node.left != null) queue.offer(node.left);
                if(node.right != null) queue.offer(node.right);
            }
            //第一种方法 : 用list记录下每层的节点  然后再做链接
            for(int i = 0 ; i < list.size() ; i++){
                if(i == list.size()-1) list.get(i).next = null;
                else list.get(i).next = list.get(i+1);
            }
        }
        return root;
    }
}
相关推荐
至乐活着1 小时前
深入解析跳表SkipList:原理、实现与性能优化实战
数据结构·算法·跳表·skiplist·java实现
Jerry2 小时前
LeetCode 383. 赎金信
算法
笑锝没心没肺2 小时前
fail2ban工具安装配置及使用
linux·运维·服务器
ai产品老杨2 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
Jerry2 小时前
LeetCode 454. 四数相加 II
算法
可编程芯片开发3 小时前
基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真
算法
Jerry3 小时前
LeetCode 202. 快乐数
算法
大卡片3 小时前
linux内核驱动开发
linux·运维·驱动开发
hans汉斯4 小时前
基于改进交叉熵损失函数与Transformer的心电信号高风险分类研究
功能测试·深度学习·算法·yolo·目标检测·分类·transformer
Jerry4 小时前
LeetCode 349. 两个数组的交集
算法