给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)力扣原文
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: [[15,7],[9,20],[3]]
示例 2:
输入: root = [1]
输出: [[1]]
示例 3:
输入: root = []
输出: []
题目详解:倒层序遍历出节点val,
解题1:
层序遍历然后reverse,最为简单粗暴
var levelOrderBottom = function (root) {
if (!root) return [];
let queue = [[root, 0]];
let result = [];
while (queue.length) {
let [node, leva] = queue.shift();
let { val, left, right } = node;
if (!result[leva]) {
result[leva] = [];
}
result[leva].push(val);
leva++;
left && queue.push([left, leva]);
right && queue.push([right, leva]);
}
result.reverse();
return result;
};
解题2:
两个队列,父队列出队的同时记录子队列,最后将result头部添加一个[],在将父队列等于子队列,子队列等于[]
var levelOrderBottom = function (root) {
if (!root) {
return [];
}
let result = [[]];
let parentQueue=[root]
let childQueue=[]
while(parentQueue.length||childQueue.length){
while(parentQueue.length){
const {val,left,right}=parentQueue.shift()
result[0].push(val)
left&&childQueue.push(left)
right&&childQueue.push(right)
if(!parentQueue.length&&childQueue.length){
result.unshift([])
continue
}
}
parentQueue=childQueue
childQueue=[]
}
return result;
};