107. 二叉树的层序遍历 II
正题
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: [[15,7],[9,20],[3]]
示例 2:
输入: root = [1]
输出: [[1]]
示例 3:
输入: root = []
输出: []
解析:
拿到这题的第一个想法是逆序的层序遍历,难道是要先倒叙遍历一下吗?然后不是,突然间发现其实里面的思维非常简单,就是正序的前序遍历,再将结果进行翻转即可。或者在输入层的时候进行到序输入,即使用数组的 unshift方法,将每一层的结果放在数组首,不就完成了倒叙层序遍历了吗?
完整代码:
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrderBottom = function(root) {
const quene = root ? [root] : []
const res = []
while(quene.length) {
const size = quene.length
const level = []
for(let index = 0 ; index < size ; index++) {
const node = quene.shift()
node.left ? quene.push(node.left) : ''
node.right ? quene.push(node.right) : ''
level.push(node.val)
}
res.unshift(level) //和正序的层序遍历不同点,这里使用 unshift 方法放入数组中
}
return res
};
此文是在已经了解正序层序遍历的基础上展开的,所以没有过多的讲解,正序的层序遍历可以参考前文:从上到下打印二叉树