• [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

     
  • 相关阅读:
    BGP
    物联网时代的智能家居
    Linux下找不到动态链接库
    Java清洁:终结处理和垃圾回收
    单例模式的改进
    shell脚本中的括号和实例
    shell如何生成rpm包仓库列表文件的对比结果
    shell脚本实现覆盖写文件和追加写文件
    怎么用命令查看某个目录下子目录占用空间的大小
    利用shell脚本函数实现网络连通性的检测
  • 原文地址:https://www.cnblogs.com/x1957/p/3521212.html
Copyright © 2020-2023  润新知