代码改变世界

leetcode - Populating Next Right Pointers in Each Node II

2013-11-02 21:04  张汉生  阅读(144)  评论(0)    收藏  举报

 

 1 /**
 2  * Definition for binary tree with next pointer.
 3  * struct TreeLinkNode {
 4  *  int val;
 5  *  TreeLinkNode *left, *right, *next;
 6  *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     void connect(TreeLinkNode *root) {
12         // IMPORTANT: Please reset any member data you declared, as
13         // the same Solution instance will be reused for each test case.
14         if (root==NULL)
15             return;
16         TreeLinkNode * rightSideNext = root->next;
17         while (rightSideNext != NULL){
18             if (rightSideNext->left != NULL){
19                 rightSideNext = rightSideNext->left;
20                 break;
21             }
22             if (rightSideNext->right != NULL){
23                 rightSideNext = rightSideNext->right;
24                 break;
25             }
26             rightSideNext = rightSideNext->next;
27         }
28         if (root->left != NULL){
29             if (root->right !=NULL)
30                 root->left->next = root->right;
31             else root->left->next = rightSideNext;
32         }
33         if (root->right!=NULL)
34             root->right->next = rightSideNext;
35         connect(root->right);
36         connect(root->left);
37     }
38 };