• Populating Next Right Pointers in Each Node


    Given a binary tree

        struct TreeLinkNode {
          TreeLinkNode *left;
          TreeLinkNode *right;
          TreeLinkNode *next;
        }
    

    Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.

    Initially, all next pointers are set to NULL.

    Note:

    • You may only use constant extra space.
    • You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).

    For example,
    Given the following perfect binary tree,

             1
           /  
          2    3
         /   / 
        4  5  6  7
    

    After calling your function, the tree should look like:

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

    Analyse: Recursively invoke the original function. Since it's perfect binary tree, if the left child does not exist, it means the current node is leaf node. Consider two situations: 

    A. the left child of root directly points to the right child of the root.

    B. the right child of root points to the left child of the next node of the root.

    Runtime: 24ms

     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         if(!root || !root->left) return;
    13         
    14         TreeLinkNode* base = root;
    15         while(base->left){
    16             TreeLinkNode* current = base;
    17             while(current->next){
    18                 current->left->next = current->right;
    19                 current->right->next = current->next->left;
    20                 current = current->next;
    21             }
    22             current->left->next = current->right;
    23             current->right = NULL;
    24             base = base->left;
    25         }
    26     }
    27 };

    Runtime: 28ms. 

     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         if(!root) return;
    13         if(!root->left) return; //reaches to the leaf node
    14         
    15         root->left->next = root->right;
    16         if(root->next)
    17             root->right->next = root->next->left;
    18         connect(root->left);
    19         connect(root->right);
    20     }
    21 };
     
  • 相关阅读:
    Opencv3 ——读取图像,显示图像
    QT5生成log日志
    QT5串口读取宇电温控器温度
    QSettings 配置信息写入本地文件
    Qt5应用程序封包
    python 创建虚拟环境
    Ubuntu更换国内源
    一个关于百度编辑器的小问题
    JavaScript等比例缩放图片(转载)
    asp.net io操作,修改文件夹的名称,报错:access to the path is denied
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4683556.html
Copyright © 2020-2023  润新知