zoukankan      html  css  js  c++  java
  • leetcode第一刷_Populating Next Right Pointers in Each Node II

    很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路。做法依旧是每次找到一层的起点,然后一层一层的走。

    假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之间的链接也简单,直接找相应父亲的左右孩子就可以。

    一般二叉树时,起点应该是上一层第一个有孩子节点的左孩子,或者没有左孩子时。是他的右孩子。

    为了能在孩子层中不断链接,我们必须保存当孩子层的前一个节点,当当前层找到一个节点有孩子,就接到这个pre节点后面,然后更新pre节点的指向。

    class Solution {
    public:
        void connect(TreeLinkNode *root) {
            if(root == NULL)    return;
            TreeLinkNode *beginNode = root, *leftNode, *pre;
            while(beginNode){
                leftNode = beginNode;
                pre = NULL;
                beginNode = NULL;
                while(leftNode){
                    if(leftNode->left&&leftNode->right){
                        leftNode->left->next = leftNode->right;
                        if(pre)    pre->next = leftNode->left;
                        if(!beginNode)  beginNode = leftNode->left;
                        pre = leftNode->right;
                    }else if(leftNode->left){
                        if(pre)    pre->next = leftNode->left;
                        if(!beginNode)  beginNode = leftNode->left;
                        pre = leftNode->left;
                    }else if(leftNode->right){
                        if(pre)    pre->next = leftNode->right;
                        if(!beginNode)  beginNode = leftNode->right;
                        pre = leftNode->right;
                    }
                    leftNode = leftNode->next;
                }
            }
        }
    };


  • 相关阅读:
    【BZOJ 3709: [PA2014]Bohater】
    清北学堂2019.8.10 & 清北学堂2019.8.11 & 清北学堂2019.8.12
    清北学堂2019.8.9
    清北学堂2019.8.8
    清北学堂2019.8.7
    清北学堂2019.8.6
    【洛谷T89379 【qbxt】复读警告】
    【洛谷T89353 【BIO】RGB三角形】
    【洛谷T89359 扫雷】
    【洛谷P2016战略游戏】
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7039540.html
Copyright © 2011-2022 走看看