剑指 Offer 32 - II. 从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
示例 1:
例如:
给定二叉树: [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
层序遍历
思路
题目要求我们将:每一层打印到同一行
首先处理边界条件:root无效直接返回[]
遍历方式:层序遍历
实现方式
因为要将每一行的结果打印在一起,所以我们需要记录每一行的一个状态,保证当前的所有元素在同一行
修改层序遍历方式:
这里我们通过格外的数组curr来表示当前行的信息,将每一行的子元素push到curr中,这样当stack遍历结束时,curr就保存的是下一行的所有节点,stack保存的是当前行的所有节点。(不能直接push到stack中,否则无法区分行的信息)
还需要一个数组currRes来保存当前行的所有结果,当stack为空时,代表当前行遍历结束。
- 将currRes的结果push到结果集合res中,然后清空currRes
- 将curr赋值给stack,并清空curr
遍历结果拿到结果集合res,返回res
var levelOrder = function(root) {
var res = []
if(!root) return res
var stack = [root]
var curr = []
var currRes = []
while(stack.length){
var item = stack.shift();
currRes.push(item.val)
if(item.left) curr.push(item.left)
if(item.right) curr.push(item.right)
if(!stack.length){
res.push(currRes)
stack = curr
curr = []
currRes = []
}
}
return res
};