https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/
题目要求给每个结点的next指针进行填充,使每个结点的next指针指向其下一个右侧结点。如果右侧没有结点,则将next指针设置为空。
struct Node* connect(struct Node* root) {
if(root == NULL)
{
return root;
}
//创建一个队列同时将第一层节点加入队列中
struct Node* Q[5000];
int left = 0, right = 0;
Q[right++] = root;
//while循环的迭代是层数
while(left < right)
{
//记录的当前队列的大小
int size = right - left;
for(int i=0 ; i < size;i++)
{
//取出队头元素
struct Node* node = Q[left++];
//链接
if(i < size-1)
{
node->next = Q[left];
}
//拓展下一层的节点
if(node->left)
{
Q[right++] = node->left;
}
if(node->right)
{
Q[right++] = node->right;
}
}
}
//返回根节点
return root;
}
由于next指针已经提前设置为NULL,所以我们只需要注意结点与结点之间的链接。