跟上一题差不多,区别是这次是任意的二叉树。
然后马上反应过来上一题的思路反而有点绕,其实说到底还是很直观的层序遍历,然后遍历的时候处理下一层的连接,连接完成后下一层已经连成一条链表,然后在下沉层序遍历下一层就好了。
代码还是比较容易理解的,就不解释了
/**
* Definition for binary tree with next pointer.
* struct TreeLinkNode {
* int val;
* TreeLinkNode *left, *right, *next;
* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
* };
*/
class Solution {
public:
void connect(TreeLinkNode* root)
{
TreeLinkNode* curHead=root;;
while(curHead)
{
TreeLinkNode* cur=curHead;
TreeLinkNode* nextHead=NULL;
TreeLinkNode* lastNode=NULL;
while(cur)
{
if (!cur->left&&!cur->right)
{
//nothing
}
else if (cur->left&&cur->right)
{
if (lastNode)
lastNode->next=cur->left;
cur->left->next=cur->right;
lastNode=cur->right;
if (!nextHead)
nextHead=cur->left;
}
else
{
TreeLinkNode* tmp=cur->left?cur->left:cur->right;
if (lastNode)
lastNode->next=tmp;
lastNode=tmp;
if (!nextHead)
nextHead=tmp;
}
cur=cur->next;
}
if ( lastNode )
lastNode->next=NULL;
curHead=nextHead;
}
}
};