使用迭代,时间复杂度O(n),空间复杂度O(1)。逐层处理。代码如下:
class Solution {
public:
void connect(TreeLinkNode *root) {
TreeLinkNode *cur, *start, *next;
start = root;
while(start)
{
TreeLinkNode *p = NULL;
next = NULL;
for(cur = start; cur; cur = cur->next)
{
if(cur->left)
{
if(p) p->next = cur->left;;
p = cur->left;
if(!next)
next = cur->left;
}
if(cur->right)
{
if(p) p->next = cur->right;
p = cur->right;
if(!next)
next = cur->right;
}
}
start = next;
}
}
};
9.02 最新代码:
class Solution {
public:
void connect(TreeLinkNode *root) {
if(!root) return;
TreeLinkNode *node = root;
while(node)
{
TreeLinkNode *nextLevel = NULL, *prev = NULL;
for(; node; node = node->next)
{
if(nextLevel == NULL) nextLevel = (node->left)?(node->left):(node->right);
if(node->left)
{
if(prev) prev->next = node->left;
prev = node->left;
}
if(node->right)
{
if(prev) prev->next = node->right;
prev = node->right;
}
}
node = nextLevel;
}
}
};