【树】117. 填充每个节点的下一个右侧节点指针 II
题目:

解答:
/*
// 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)
{
Node *n = root;
while (n)
{
// the first node of next level
Node * next = NULL;
// previous node on the same level
Node * prev = NULL;
for (; n; n=n->next)
{
if (!next)
next = n->left ? n->left:n->right;
if (n->left)
{
if (prev) prev->next = n->left;
prev = n->left;
}
if (n->right)
{
if (prev)
{
prev->next = n->right;
}
prev = n->right;
}
}
n = next; // turn to next level
}
return root;
}
};