思路:
只需要在遍历每层的结点的时,获取到该结点元素Node* cur = que.front(),再从que队列中将该结点弹出que.pop()
之后进行判断,如果是只有一个结点,那么直接让这个结点指向NULL if(i = size - 1) cur->next = NULL;
如果不止一个结点,那么就让cur指向后一个结点元素,因为cur存储的是已经从队列中弹出的结点元素,那么cur的后一个元素就是弹出后que的头结点元素 cur ->next = que.front();
然后将左子树和右子树push进队列中即可
全代码:
class Solution {
public:
Node* connect(Node* root) {
queue<Node*> que;
if(root != NULL) que.push(root);
while(!que.empty())
{
int size = que.size();
for(int i = 0; i < size; i++)
{ //获取队列头结点
Node* cur = que.front();
que.pop();
if(i == size -1)
{//如果该层只有一个结点,则直接让他指向NULL
cur ->next = NULL;
}else
{//让该结点指向队列的头结点,也就是目前的结点指向后一个结点
cur ->next = que.front();
}
if(cur ->left) que.push(cur ->left);
if(cur ->right) que.push(cur ->right);
}
}
return root;
}
};