zoukankan      html  css  js  c++  java
  • LeetCode 116.populating-next-right-pointers-in-each-node

    题意

    给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

    struct Node {

    int val;

    Node *left;

    Node *right;

    Node *next;

    }

    填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

    初始状态下,所有 next 指针都被设置为 NULL。

    示例:
    在这里插入图片描述
    输入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":null,"right":null,"val":4},"next":null,"right":{"$id":"4","left":null,"next":null,"right":null,"val":5},"val":2},"next":null,"right":{"$id":"5","left":{"$id":"6","left":null,"next":null,"right":null,"val":6},"next":null,"right":{"$id":"7","left":null,"next":null,"right":null,"val":7},"val":3},"val":1}

    输出:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":{"$id":"4","left":null,"next":{"$id":"5","left":null,"next":{"$id":"6","left":null,"next":null,"right":null,"val":7},"right":null,"val":6},"right":null,"val":5},"right":null,"val":4},"next":{"$id":"7","left":{"$ref":"5"},"next":null,"right":{"$ref":"6"},"val":3},"right":{"$ref":"4"},"val":2},"next":null,"right":{"$ref":"7"},"val":1}

    解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。

    提示:

    
    你只能使用常量级额外空间。
    
    使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
    
    

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node

    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    题目要求使用O(1)的额外空间,所以考虑类似BFS的算法。

    因为树是完美的,那么当前这一层和上一层的关系是紧密的,体现在上一层节点cur存在next不为null那么当前层cur.left也存在next并且cur.right也存在next,可以根据示例图理解。每一层从上一层的最左边节点的左孩子开始遍历。

    代码

    
    /*
    
    // Definition for a Node.
    
    class Node {
    
        public int val;
    
        public Node left;
    
        public Node right;
    
        public Node next;
    
        public Node() {}
    
    
        public Node(int _val) {
    
            val = _val;
    
        }
    
        public 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 pre=root;
    
            while(pre!=null){
    
                Node cur=pre;
    
                while(cur!=null){
    
                    if(cur.left!=null)
    
                        cur.left.next=cur.right;
    
                    if(cur.right!=null&&cur.next!=null){
    
                        cur.right.next=cur.next.left;
    
                    }
    
                    cur=cur.next;
    
                }
    
                pre=pre.left;
    
            }
    
            return root;
    
        }
    
    }
    
    
  • 相关阅读:
    一些业内有名的网站收集
    WCF重载
    FCKEditor fckconfig.js配置,添加字体和大小 附:中文字体乱码问题解决
    查询第几条到第几条的数据的SQL语句
    SPOJ 9939 Eliminate the Conflict
    UVA 10534 Wavio Sequence
    HDU 3474 Necklace
    POJ 2823 Sliding Window
    UVA 437 The Tower of Babylon
    UVA 825 Walking on the Safe Side
  • 原文地址:https://www.cnblogs.com/mcq1999/p/12331045.html
Copyright © 2011-2022 走看看