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;
        }
    };
  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12106374.html
Copyright © 2011-2022 走看看