填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node* next;
Node() {}
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 *> tmpLayer;
Node *targetNode = nullptr;
Node *tmpNode = nullptr;
int numNode = 1;
int numNxt = 0;
int firstNode = 0;
tmpLayer.push(root);
while(!tmpLayer.empty())
{
numNxt = 0;
firstNode = 1;
while(numNode)
{
targetNode = tmpLayer.front();
if(tmpNode)
cout<<"tmpVal is "<<tmpNode->val<<endl;
cout<<"targetVal is "<<targetNode->val<<endl;
tmpLayer.pop();
numNode--;
if(targetNode->left)
{
tmpLayer.push(targetNode->left);
numNxt++;
}
if(targetNode->right)
{
tmpLayer.push(targetNode->right);
numNxt++;
}
if(firstNode) //第一个节点
{
targetNode->next = nullptr;
cout<<"first Node " <<targetNode->val<<"==>null"<<endl;
firstNode = 0;
}
else if(numNode == 0) //最后一个节点
{
tmpNode->next = targetNode;
cout<<tmpNode->val<<"==>"<<targetNode->val<<endl;
targetNode->next = nullptr;
cout<<"last Node" <<targetNode->val<<"==>null"<<endl;
}
else
{
cout<<tmpNode->val<<"==>"<<targetNode->val<<endl;
tmpNode->next = targetNode;
}
tmpNode = targetNode;
}
numNode = numNxt;
}
return root;
}
};