跟上一题差不多,区别是这次是任意的二叉树。
然后马上反应过来上一题的思路反而有点绕,其实说到底还是很直观的层序遍历,然后遍历的时候处理下一层的连接,连接完成后下一层已经连成一条链表,然后在下沉层序遍历下一层就好了。
代码还是比较容易理解的,就不解释了
/** * 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; } } };