给定一个二叉树:
struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
} 
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。
初始状态下,所有 next 指针都被设置为 NULL 。
示例 1:

输入:root = [1,2,3,4,5,null,7] 输出:[1,#,2,3,#,4,5,7,#] 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。
示例 2:
输入:root = [] 输出:[]
解题思路:
作者:灵茶山艾府
 链接:https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/solutions/1/san-chong-fang-fa-dfsbfsbfslian-biao-fu-1bmqp/
 来源:力扣(LeetCode)
 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码:
/*
// 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 {
    vector<Node *> pre;
public:
    Node* connect(Node* root) {
        dfs(root,0);
        return root;
    }
    void dfs(Node * node , int depth){
        if (node == nullptr) {
            return;
        }
        if (depth==pre.size()){   // node 是这一层最左边的节点  (新的一层)
            pre.push_back(node);
        }else{                    // 该层新增节点
            pre[depth]->next = node;
            pre[depth] = node;
        }
        dfs(node->left,depth+1);
        dfs(node->right,depth+1);
    }
};
                


















