【LeetCode】No.116. Populating Next Right Pointers in Each Node -- Java Version
创始人
2024-03-25 13:13:27
0

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

1. 题目介绍()

You are given a perfect binary tree where all leaves are on the same level, and every parent has two children. The binary tree has the following definition:

【Translate】: 给你一个完美的二叉树,所有的叶结点都在同一层,每个父结点都有两个子结点。二叉树的定义如下:

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.

【Translate】: 填充每个next指针,使其指向它右边的下一个节点。如果没有下一个右节点,则下一个指针应设置为NULL

Initially, all next pointers are set to NULL.

【Translate】: 最初,所有的next指针都被设置为NULL

【测试用例】:

示例1:
testcase1

示例2:
testcase2

【条件约束】:

Constraints

【跟踪】:

Follow-up:

  • You may only use constant extra space.
  • The recursive approach is fine. You may assume implicit stack space does not count as extra space for this problem.

【Translate】:

  • 只使用常数的额外空间。
  • 递归方法很好。对于这个问题,您可以假设隐式堆栈空间不算作额外空间。

【相似问题】:

related

2. 题解

2.1 层序遍历

该题解是在 【LeetCode】No.102. Binary Tree Level Order Traversal – Java Version 的基础上,稍作修改得到的,通过Queue来实现BFS,保证queue每次只存储当前层元素,当前元素通过弹出获得,next元素查询但不弹出,直到最后元素后,让其next为null.

/*
// 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) {if(root == null) return null;Queue queue = new LinkedList<>();queue.add(root);while(!queue.isEmpty()){int qlen = queue.size();for(int i = 0; i < qlen; i++){Node curr = queue.poll();Node second = queue.peek();curr.next = second;if(i == qlen-1){curr.next = null;}if(curr.left != null) queue.add(curr.left);if(curr.right != null) queue.add(curr.right);}}return root;}
}

act1

2.2 递归

原题解来自于 wilsoncursino 的 Java 0ms with visual explanation.

xmind

不得不说,这确实是一个很巧妙的办法,对代码有疑惑的同学看一下上面的图应该就能很容易理清思路了。

/*
// 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) {if(root == null) return null;if(root.left != null) root.left.next = root.right;if(root.right != null && root.next != null) root.right.next = root.next.left;connect(root.left);connect(root.right);return root;}
}

act2

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...