117. 填充每个节点的下一个右侧节点指针 II
Difficulty
Medium
Tags
二叉树
二叉树层次遍历
Star
给定一个二叉树
struct Node { int val; Node *left; Node *right; Node *next; }
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为
NULL
。初始状态下,所有 next 指针都被设置为
NULL
。进阶:
- 你只能使用常量级额外空间。
- 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
示例:

输入:root = [1,2,3,4,5,null,7] 输出:[1,#,2,3,#,4,5,7,#] 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。
提示:
- 树中的节点数小于
6000
100 <= node.val <= 100
法1: 宽度优先搜索
思路
和 116. 填充每个节点的下一个右侧节点指针 题目的区别在于,题是给定完美二叉树,而该题是给定任意二叉树。
因为的解体思路没有限定完美二叉树,所以该题使用的方法和题完全一样,代码也一样
题解
class Solution: def connect(self, root: 'Node') -> 'Node': if root is None: return root queue = [] queue.append(root) while len(queue) > 0: temp_len = len(queue) temp_list = [] while temp_len > 0: temp_node = queue.pop(0) # 如果temp_node不是该层最后一个节点,就将temp_node.next指向队列首节点 if temp_len > 1: temp_node.next = queue[0] temp_len -= 1 if temp_node.left: queue.append(temp_node.left) if temp_node.right: queue.append(temp_node.right) return root