leetcode117填充每个节点的下一个右侧节点指针II

leetcode 117 Populating Next Right Pointers in Each Node II

Posted by BY on July 5, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的117题。

问题描述

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

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。

示例 1:

分析:

我直接将116的代码直接提交了,后来看到有大佬的算法很简单易懂
思路就是: 在当前层时,把下一层第一个节点用dummy记录下来,然后遍历当前层的时候,把下面一层串起来,当前层遍历完,通过dummy可以开始下一层的遍历(同样重复上述, 将dummy记录下下层第一个节点,然后遍历该层, 并把下面一层串起来)

class Solution {
public:
    Node* connect(Node* root) {
        Node* curr=root;
        Node* dummy=new Node;
        while(curr) // 每次到这表示处理完一层
        {
            Node* tail = dummy;
            while (curr) // 遍历当前层的节点,处理下一层
            {
                if (curr->left) // 下一层
                {
                    tail->next=curr->left;
                    tail=tail->next;
                }
                if (curr->right) // 下一层
                {
                    tail->next=curr->right;
                    tail=tail->next;
                }
                curr=curr->next;
            }
            curr=dummy->next; // 指向下一层的开始,继续
            if (tail==dummy) break;
        }
        return root;
    }
};

总结:

勤思考。

结语

不管怎么样好好加油。