递归分层处理,时间O(n),空间O(logN)。代码如下:
class Solution {
public:
void connect(TreeLinkNode *root) {
if(!root) return;
if(root->left)
root->left->next = root->right;
if(root->right)
root->right->next = root->next?root->next->left:NULL;
connect(root->left);
connect(root->right);
}
};
参考:http://fisherlei.blogspot.hk/2012/12/leetcode-populating-next-right-pointers.html
9.2 非递归代码:
class Solution {
public:
void connect(TreeLinkNode *root) {
if(!root) return;
TreeLinkNode *node = root;
while(node)
{
TreeLinkNode *nextLevel = node->left;
while(node && nextLevel)
{
node->left->next = node->right;
node->right->next = (node->next)?(node->next->left):NULL;
node = node->next;
}
node = nextLevel;
}
}
};