给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如: 给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其自底向上的层序遍历为:
[
[15,7],
[9,20],
[3]
]
解题思路
这一题可以用递归的方式,对树的每一层的节点做标记,然后遍历每一层节点,将值放到二维数组中,因为是要自底向上层序遍历,可以将返回数组反转。
代码
var getResult = function (root, k, ans) {
if (!root) return
if (k == ans.length) ans.push([])
ans[k].push(root.val)
getResult(root.left, k + 1, ans)
getResult(root.right, k + 1, ans)
}
var levelOrderBottom = function(root) {
// 递归
if (!root) return [];
let ans = [], k = 0;
getResult(root, k, ans)
// 翻转成自底向上
for (let i = 0, j = ans.length - 1; i < j; i++, j--) {
[ans[i], ans[j]] = [ans[j], ans[i]]
}
return ans
};