思路:
跟上一题思路一样:只要上一层next指针串起来了该层所有对象,那么下一层就可以串起来。
/**
* 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 {
private:
TreeLinkNode* findNextNodeNextLevel(TreeLinkNode* &cur, TreeLinkNode* curNextLevel) {
if(cur->left == curNextLevel && cur->right != NULL) return cur->right;
else {
while(cur->next != NULL) {
cur = cur->next;
if(cur->left != NULL && cur->left != curNextLevel) return cur->left;
if(cur->right != NULL && cur->right != curNextLevel) return cur->right;
}
}
return NULL;
}
TreeLinkNode* findStartNodeNextLevel(TreeLinkNode* node) {
if(node == NULL) return NULL;
do {
if(node->left != NULL) return node->left;
if(node->right != NULL) return node->right;
node = node->next;
}while(node != NULL);
return NULL;
}
public:
void connect(TreeLinkNode *root) {
if(root == NULL) return;
TreeLinkNode *start, *cur, *next;
while(root != NULL) {
start = findStartNodeNextLevel(root);
cur = start;
next = findNextNodeNextLevel(root, start);
while(next != NULL) {
cur->next = next;
cur = next;
next = findNextNodeNextLevel(root, cur);
}
root = start;
}
}
};