[LeetCode] Populating Next Right Pointers in Each Node
The idea is similar to a level-order traversal and remember to take full advantages of the prefect binary tree assumption in the problem statement.
The code (iterative solution) is as follows.
1 class Solution { 2 public: 3 void connect(TreeLinkNode *root) { 4 TreeLinkNode* pre = root; 5 TreeLinkNode* cur = NULL; 6 while (pre) { 7 cur = pre; 8 while (cur && cur -> left) { 9 cur -> left -> next = cur -> right; 10 if (cur -> next) 11 cur -> right -> next = cur -> next -> left; 12 cur = cur -> next; 13 } 14 pre = pre -> left; 15 } 16 } 17 };
This problem can also be solved recursively.
1 class Solution { 2 public: 3 void connect(TreeLinkNode *root) { 4 if (!root) return; 5 if (root -> left) { 6 root -> left -> next = root -> right; 7 if (root -> next) 8 root -> right -> next = root -> next -> left; 9 } 10 connect(root -> left); 11 connect(root -> right); 12 } 13 };