[路飞]_leetcode_107. 二叉树的层序遍历 II

101 阅读1分钟

给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如: 给定二叉树 [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
};