[路飞]算法:二叉树的层序遍历 II (自底向上层序遍历)

396 阅读1分钟

107. 二叉树的层序遍历 II

正题

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

示例 1:

image.png

输入: 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
};

image.png

此文是在已经了解正序层序遍历的基础上展开的,所以没有过多的讲解,正序的层序遍历可以参考前文:从上到下打印二叉树