zoukankan      html  css  js  c++  java
  • 117. 填充每个节点的下一个右侧节点指针 II

    2019-12-27

    11:21:54

    解法1:DFS 递归遍历

    参考:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/solution/c-o1kong-jian-jian-ji-di-gui-by-qqqun902025048/

    解题思路:

    对于任意一次递归,只考虑如何设置子节点的 next 属性,分为三种情况:
    没有子节点:直接返回
    有一个子节点:将这个子节点的 next 属性设置为同层的下一个节点,即为 root.next 的最左边的一个节点,如果 root.next 没有子节点,则考虑 root.next.next,依次类推
    有两个节点:左子节点指向右子节点,然后右子节点同第二种情况的做法
    注意递归的顺序需要从右到左

    /*
    // Definition for a Node.
    class Node {
    public:
        int val;
        Node* left;
        Node* right;
        Node* next;
    
        Node() : val(0), left(NULL), right(NULL), next(NULL) {}
    
        Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}
    
        Node(int _val, Node* _left, Node* _right, Node* _next)
            : val(_val), left(_left), right(_right), next(_next) {}
    };
    */
    class Solution {
    public:
        Node* connect(Node* root) {
            Node* rot = root;
            if(rot != NULL && (rot->left || rot->right)){
                if(rot->left && rot->right){
                    rot->left->next = rot->right;
                }
                Node* node = rot->right ? rot->right : rot->left;
                Node* head = rot->next;
                while(head != nullptr && !(head->left || head->right)){
                    head = head->next;
                }
                node->next = head ? (head->left ? head->left : head->right) : nullptr;
                connect(root->right);//这里一定是右子节点先遍历
                connect(root->left);
            }
            return rot;
        }
    };
  • 相关阅读:
    树莓派控制Arduino
    树莓派的基本配置
    OneNet的产品创建和支持协议
    云平台基本认知(OneNet)
    初识Arduino
    NEFU-大二大三训练赛17C-最大值
    NEFU-大二大三训练赛17D-泡泡堂
    pb数据导出
    PB窗口根据分辨率的大小调整窗口大小
    PowerBuilder常用字符串函数
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12106374.html
Copyright © 2011-2022 走看看