给定一个二叉树:
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);}
};