zoukankan      html  css  js  c++  java
  • 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 };
    
    
    
    
    
    
    
  • 相关阅读:
    用DOS把一个文件夹下的所有文件名打印到txt文件里
    多线程时的CreateDispatch问题
    [转载]惟楚有才
    [转] 数学专业参考书整理推荐
    大整数处理类(cpp文件)
    [转]英文文献检索
    大整数处理类(头文件)
    国外遥感GIS期刊整理(转)
    [转载]Hibernate中No row with the given identifier exis
    在武汉,总有那么一个词~~~
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3779987.html
Copyright © 2011-2022 走看看