12月29日代码随想录填充每个节点的下一个右侧节点指针

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

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

复制代码
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 = []
输出:[]

提示:

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

思路

在层序遍历的过程中写入节点的next指针,每一层定义一个temp元素用于放置上一个元素,方便在遍历到下一个值时放入前一节点的next指针。

java 复制代码
class Solution {
    public Node connect(Node root) {
        if(root==null){
            return root;
        }
        root.next=null;
        Deque<Node> stack=new ArrayDeque<>();
        stack.addFirst(root);
        while(!stack.isEmpty()){
            int len= stack.size();
            Node temp=null;
            for(int i=0;i<len;i++){
                Node node=stack.getFirst();
                if(node.left!=null){
                    stack.addLast(node.left);
                    stack.addLast(node.right);
                    if(temp!=null){
                        temp.next=node.left;
                        temp=node.left;
                    }else {
                        temp=node.left;
                    }
                    temp.next=node.right;
                    temp=node.right;
                    if(i==len-1){
                        node.right.next=null;
                    }
                    
                }
                stack.pollFirst();                
            }
        }
        return root; 
    }
}
相关推荐
Wect几秒前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·typescript
憨波个9 分钟前
【说话人日志】DOVER-Lap:overlap-aware diarization 输出融合算法
人工智能·深度学习·算法·音频·语音识别
叼烟扛炮16 分钟前
C++第四讲:类和对象(下)
c++·算法·类和对象
Rabitebla16 分钟前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
代码不停34 分钟前
BFS解决floodfill算法题目练习
算法·宽度优先
上弦月-编程40 分钟前
C语言指针从入门到实战
java·jvm·算法
WL_Aurora41 分钟前
Python 算法基础篇之树和二叉树
python·算法
txzrxz42 分钟前
关于前缀和
算法·动态规划·图论
杨连江44 分钟前
载流子矩阵限域束缚实现常温常压超导的理论与结构设计
算法
做cv的小昊1 小时前
【TJU】研究生应用统计学课程笔记(6)——第二章 参数估计(2.4 区间估计)
人工智能·笔记·线性代数·算法·机器学习·数学建模·概率论