两题菊科使用下面的算法,不过此算法的空间复杂度为O(n^2).
代码
class Solution
{
public:
void connect(TreeLinkNode *root)
{
TreeLinkNode *pre, *tempNode;
queue<TreeLinkNode*>queue_pop, queue_push;
bool flag = true;
if(root==NULL)
return ;
queue_pop.push(root);
while(!queue_pop.empty())
{
if(queue_push.empty()&&flag)
{
flag = false;
tempNode = queue_pop.front();
pre = tempNode;
}
else
{
tempNode = queue_pop.front();
pre ->next= tempNode;
pre = tempNode;
}
queue_pop.pop();
if(queue_pop.empty())
{
tempNode->next = NULL;
}
if(tempNode->left)
queue_push.push(tempNode->left);
if(tempNode->right)
queue_push.push(tempNode->right);
if(queue_pop.empty())
{
flag = true;
swap(queue_pop, queue_push);
}
}
}
};