117. Populating Next Right Pointers in Each Node II

发布时间:2019-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了117. Populating Next Right Pointers in Each Node II脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Given a binary tree

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.

Initially, all next pointers are set to NULL.

Example:

Input: {"$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":null,"next":null,"right":{"$id":"6","left":null,"next":null,"right":null,"val":7},"val":3},"val":1}

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

Explanation: Given the above binary tree (Figure A), your function should populate each next pointer to point to its next right node, just like in Figure B.

Note:

1. You may only use constant extra space.
2. Recursive approach is fine, implicit stack space does not count as extra space for this problem.

难度:medium

题目:给定二叉树,计算结点指向其相邻右结点的下一跳指针。如果没有相邻的右结点则next为NULL.

思路:递归

Runtime: 3 ms, faster than 18.40% of Java online submissions for Populating Next Right Pointers in Each Node II.
Memory Usage: 51.8 MB, less than 100.00% of Java online submissions for Populating Next Right Pointers in Each Node II.

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() {}

    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 ptr = root;
        while (ptr != null) {
            ptr = buildNodeNext(ptr);
        }
        
        return root;
    }
    
    private Node buildNodeNext(Node head) {
        if (null == head) {
            return null;
        }
        Node nextLevelLeftMost = buildNodeNext(head.next);
        Node left = head.left;
        Node right = head.right;
        if (left != null && right != null) {
            left.next = right;
            right.next = nextLevelLeftMost;
            return left;
        }
        
        if (left != null && right == null) {
            left.next = nextLevelLeftMost;
            return left;
        } 
        
        if (left == null && right != null) {
            right.next = nextLevelLeftMost;
            return right;
        }
        
        return nextLevelLeftMost;
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的117. Populating Next Right Pointers in Each Node II全部内容,希望文章能够帮你解决117. Populating Next Right Pointers in Each Node II所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: