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 };