LeetCode --- Populating Next Right Pointers in Each Node II

题目链接

Problem description:

Follow up for problem "Populating Next Right Pointers in Each Node".

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

For example,
Given the following binary tree,

         1
       /  \
      2    3
     / \    \
    4   5    7

After calling your function, the tree should look like:

         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \    \
    4-> 5 -> 7 -> NULL

Accepted Code:
 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_helper(TreeLinkNode *root) {
12         if (root == NULL) return ;
13         //  when root is a leaf node
14         if (root->left == NULL && root->right == NULL) return;
15         if (root->left != NULL && root->right != NULL)
16             root->left->next = root->right;
17         
18         TreeLinkNode *p = NULL, *head = root; 
19         // iterator on the level
20         while (head->next != NULL && head->next->left == NULL && head->next->right == NULL)
21             head = head->next;
22         
23         if (head->next != NULL) {
24             if (head->next->left != NULL)
25                 p = head->next->left;
26             else
27                 p = head->next->right;
28         }
29         // right child is not null
30         if (root->right != NULL) 
31             root->right->next = p;
32         else 
33             root->left->next = p;
34         // recursive solve right and left child of root
35         // attention that the right child should be proceeded first
36         connect_helper(root->right);
37         connect_helper(root->left);
38     }
39     void connect(TreeLinkNode *root) {
40         // root = NULL
41         if (root == NULL) return ;
42         // deal root node
43         root->next = NULL;
44          
45         connect_helper(root);
46     } 
47 };

 



posted on 2014-06-10 14:55  Stomach_ache  阅读(149)  评论(0编辑  收藏  举报

导航