前言
题目: 116. 填充每个节点的下一个右侧节点指针
文档: 代码随想录——填充每个节点的下一个右侧节点指针
编程语言: C++
解题状态: 成功解答!
思路
本题有一个讨巧的地方就是这是一个完全二叉树,层内循环的时候,不需要考虑下一个节点存不存在,除了最后一个节点,可以直接认为每个节点后面都存在节点,之后将最后一个节点拿出来分开讨论即可。
代码
/*
// 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:
Node* connect(Node* root) {
queue<Node*> q;
if (root != NULL) q.push(root);
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
Node* node = q.front();
q.pop();
if (i == size - 1) {
node -> next = NULL;
} else {
node -> next = q.front();
}
if (node -> left) q.push(node -> left);
if (node -> right) q.push(node -> right);
}
}
return root;
}
};