117_填充每个节点的下一个右侧节点指针II
117. 填充每个节点的下一个右侧节点指针 II
给定一个二叉树
1 | struct Node { |
填充它的每个
next
指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将
next
指针设置为 NULL
。
初始状态下,所有 next
指针都被设置为
NULL
。
示例:
输入:root = [1,2,3,4,5,null,7]
输出:[1,#,2,3,#,4,5,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。
思路:
和前面的116 填充每个节点的下一个右侧节点指针不同的是,现在给定的不是一个完美二叉树,所以递归的话不好实现。
这道题希望我们把二叉树各个层的点组织成链表,一个非常直观的思路是层次遍历。树的层次遍历基于广度优先搜索,它按照层的顺序遍历二叉树,在遍历第
i
层前,一定会遍历完第 i - 1
层。
算法如下:初始化一个队列
q
,将根结点放入队列中。当队列不为空的时候,记录当前队列大小为
n,从队列中以此取出 n 个元素并通过这 n
个元素拓展新节点。如此循环,直到队列为空。我们不难写出这样的代码:
1 | class Solution { |