zoukankan      html  css  js  c++  java
  • [leetcode]Populating Next Right Pointers in Each Node II

             1
           /  
          2    3
         /     
        4   5    7


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


    用O(1)的空间

    那就利用next节点,一层一层的来遍历好了
    首先是root,我们把它的left和right连起来
    然后root切换到下一层

    然后遍历下一层的每个节点(因为next连了的
    再分别把他们的left,right什么的连起来

    用两个变量就ok了
    一个prev记录当前层前一节点是啥(用来连接的
    一个next记录下一层的开始(用户切换到下一层

    /**
     * Definition for binary tree with next pointer.
     * struct TreeLinkNode {
     *  int val;
     *  TreeLinkNode *left, *right, *next;
     *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
     * };
     */
    class Solution {
    public:
        void connect(TreeLinkNode *root) {
            TreeLinkNode* prev = nullptr;
            TreeLinkNode* next = nullptr;
            
            while(root) {
                prev = nullptr;
                next = nullptr;
                //if(next == nullptr) next = root->left ? root->left : root->right;
                for( ; root ; root = root->next) {
                    if(next == nullptr) next = root->left ? root->left : root->right;
                    if(root->left) {
                        if(prev) prev->next = root->left;
                        prev = root->left;
                    }
                    if(root->right) {
                        if(prev) prev->next = root->right;
                        prev = root->right;
                    }
                }
                root = next;
            }
        }
    };
    
    

    注释的那一句,开始一位本来是一样的嘛,但是仔细一想,我第一个left可能是空啊,当前层的第一个是叶子节点,但是他的兄弟不是啊

    所以要写到循环里面,找到第一个有left或者right的节点,然后把left或者right(left优先)赋值给next

     
  • 相关阅读:
    python3之datetime模块
    python3之time模块
    前端面试题01
    前端面试题02
    angularjs
    nodejs
    android 报错记录
    android知识点回顾二
    android知识点回顾
    Broadcast广播代码例子
  • 原文地址:https://www.cnblogs.com/x1957/p/3521212.html
Copyright © 2011-2022 走看看