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

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

时间:2022-09-02 21:55:10浏览次数:77  
标签:Node right val next 116 指针 节点 left

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

 

解析:

标记每层第一个即可

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() : val(0), left(NULL), right(NULL), next(NULL) {}

    Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}

    Node(int _val, Node* _left, Node* _right, Node* _next)
        : val(_val), left(_left), right(_right), next(_next) {}
};
*/

class Solution {
public:
    void bfs(Node*& root)
    {
        queue<pair<Node*, int> > Q;
        Q.push(pair<Node*, int> (root, 1));
        while(!Q.empty())
        {  
            pair<Node*, int> u = Q.front();
            Q.pop();
            if(!Q.empty())
            {
                pair<Node*, int> v = Q.front();
                if(v.second == 1) u.first->next = nullptr;
                else u.first->next = v.first;
            }
            else u.first->next = nullptr;
            if(u.first->left)
            {
                if(u.second == 1)
                {
                    Q.push(pair<Node*, int> (u.first->left, 1));
                }
                else Q.push(pair<Node*, int> (u.first->left, 0));
            }
            if(u.first->right)
                Q.push(pair<Node*, int> (u.first->right, 0));
        }
    }
    Node* connect(Node* root) {
        if(root == nullptr) return root;
        bfs(root);
        return root;





        
    }
};

 

标签:Node,right,val,next,116,指针,节点,left
From: https://www.cnblogs.com/WTSRUVF/p/16651482.html

相关文章

  • 指针函数和函数指针(C语言)
    @目录指针函数函数指针指针函数指针函数就是指针型函数,该函数返回一个地址。#include<stdio.h>//指针函数*point_fuc()int*point_fuc(inta,intb,int*sum){......
  • 如何将docker swarm的manager节点降级为worker节点?
    将manager降级为worker 这个问题,说来挺有意思的,我在集群里面创建了2个manager,然后,模拟将第2个manager节点,从集群中移出去,结果发现报错了: [root@nccztsjb-node-07......
  • CDH开启高可用后,NameNode主备节点切换
    获取NamenodeID查看nn1的状态hdfshaadmin-getServiceStatenamenode30#standbyhdfshaadmin-getServiceStatenamenode37#active修改nn2为standby状态hdf......
  • 【C++】智能指针
    这篇讲得很好https://blog.csdn.net/sjp11/article/details/123899141?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166201751616781790748003%2522%252C%2......
  • 19删除链表的倒数第N个节点
    题目19删除链表的倒数第N个节点给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=......
  • 24 两两交换链表中的节点
    题目24两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输......
  • 数组&指针
    分类inta;int*a;int**a;inta[10];int*a[10];int(*a)[10];//一个指向有10个整型数数组的指针int(*a)(int);//一个指向函数的指针,该函数有一......
  • 给Docker集群中Label节点打上标签与服务约束
    https://www.cnblogs.com/caoweixiong/p/12382282.htmlLabel作用:在服务器中通常需要将某个服务固定在某一台机器上运行的时候,可以给集群中的机器打上标签......
  • leetcode-11-双指针
    /**<p>给定一个长度为<code>n</code>的整数数组&nbsp;<code>height</code>&nbsp;。有&nbsp;<code>n</code>&nbsp;条垂线,第<code>i</code>条线的两个端点是&nbsp;<cod......
  • 前端也该刷点算法题——双指针解“链表”题也太香了叭!
    双指针解“链表”题也太香了叭!同步双指针1查找链表中倒数第k个节点剑指Offer22.链表中倒数第k个节点思路:假设链表的长度为n,不难得出倒数第k个节点即为整数第n+......