给定一个二叉树
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 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) {
if(root == NULL || (root->left == NULL && root->right == NULL)) return root;
Node *pNext = root->next;
while(pNext)
{
if(pNext->left)
{
pNext = pNext->left;
break;
}
else if(pNext->right)
{
pNext = pNext->right;
break;
}
else
{
pNext = pNext->next;
}
}
if(root->left && NULL == root->right)
{
root->left->next = pNext;
}
else if(NULL == root->left && root->right)
{
root->right->next = pNext;
}
else
{
root->left->next = root->right;
root->right->next = pNext;
}
connect(root->right); //注意此处是先遍历右子树,再遍历左子树
connect(root->left);
return root;
}
};