博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
117. Populating Next Right Pointers in Each Node II
阅读量:6250 次
发布时间:2019-06-22

本文共 2707 字,大约阅读时间需要 9 分钟。

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;    }}

转载地址:http://qgysa.baihongyu.com/

你可能感兴趣的文章
【代码小记】无
查看>>
【知识点】Java机密
查看>>
如何在 Java 中正确使用 wait, notify 和 notifyAll?
查看>>
BarTender 2016表单中的“秤显示”控件
查看>>
仓库盘:动态盘点
查看>>
全面理解javascript的caller,callee,call,apply概念[转载]
查看>>
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
查看>>
Jquery 下拉框取值
查看>>
POJ 1287 Networking 【最小生成树Kruskal】
查看>>
IDEA中使用Maven创建Java Web项目
查看>>
2017.12.25
查看>>
react--1.创建项目
查看>>
C++ 与OpenCV 学习笔记
查看>>
【CV学习7】FAST算法详解
查看>>
11月20日学习内容整理:jquery插件
查看>>
预科班第四次考核总结
查看>>
【js】再谈移动端的模态框实现
查看>>
html
查看>>
Java变量类型
查看>>
[leetcode-89-Gray Code]
查看>>