107. 二叉树的层序遍历 II
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1:
例如:
给定二叉树: [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[15,7],
[9,20],
[3]
]
提示:
节点总数 <= 1000
层序遍历
思路
题目要求我们将:每一层打印到同一行,并且从底部之上,只需要unshif的方式,将后面的值插入到前面
首先处理边界条件:root无效直接返回[]
遍历方式:层序遍历
实现方式
因为要将每一行的结果打印在一起,所以我们需要记录每一行的一个状态,保证当前的所有元素在同一行
修改层序遍历方式:
这里我们通过格外的数组curr来表示当前行的信息,将每一行的子元素push到curr中,这样当stack遍历结束时,curr就保存的是下一行的所有节点,stack保存的是当前行的所有节点。(不能直接push到stack中,否则无法区分行的信息)
还需要一个数组currRes来保存当前行的所有结果,当stack为空时,代表当前行遍历结束。
- 将currRes的结果push到结果集合res中,然后清空currRes
- 将curr赋值给stack,并清空curr
遍历结果拿到结果集合res,返回res
var levelOrderBottom = 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.unshift(currRes)
stack = curr
curr = []
currRes = []
}
}
return res
};