题目
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如: 给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其自底向上的层序遍历为:
[
[15,7],
[9,20],
[3]
]
解题思路
这也能算一题,这不是一样的吗??这也能算一题,我真的是~~
参见另一片:从上到下打印二叉树 II
递归法
通过level变量记录二叉树递归层级;将枚举到的二叉树节点值塞进指定层级中。输出的时候将数组反转即可
var levelOrderBottom = function(root) {
if (!root) return [];
const result = []
helper(root, 0)
//输出的时候将数组反转即可
return result.reverse()
function helper(node, level) {
if (node === null) return
if (result[level] === undefined) {
result[level] = [node.val]
} else [result[level].push(node.val)]
helper(node.left, level + 1)
helper(node.right, level + 1)
}
};
广度优先遍历
将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印。
var levelOrderBottom = function(root) {
if (root === null) return []
const result = []
let stack = [root]
while (stack.length) {
const path = []
for (let i = stack.length - 1; i >= 0; i--) {
let temp = stack.shift()
path.push(temp.val)
temp.left && stack.push(temp.left)
temp.right && stack.push(temp.right)
}
// 将结果放在队列头部
result.unshift(path)
}
return result
};