题目链接
英文链接:https://leetcode.com/problems/populating-next-right-pointers-in-each-node/
中文链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/
题目详述
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
1 | struct Node { |
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL
。
初始状态下,所有 next 指针都被设置为 NULL
。
示例:
1 | 输入:{"$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} |
提示:
- 你只能使用常量级额外空间。
- 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
题目详解
- 从根节点开始进行广度优先搜索,每次遍历一层结点。
- 对于每个结点,先让左孩子的
next
指针指向右孩子,右孩子的next
指针指向下一个结点的左孩子。 - 每当遍历完这一层时,代表下一层的结点已经通过
next
指针链接起来了。进入下一层就可以重复这样操作。 - 由于
next
指针的存在,可以只使用常量级额外空间来进行搜索,空间复杂度为O(1)
。
1 | public class LeetCode_00116 { |