107. 二叉树的层序遍历 II
描述
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例
示例1
输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]
示例2
输入:root = [1]
输出:[[1]]
示例3
输入:root = []
输出:[]
链接
https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/
解题思路
思路一: 广度优先遍历
与 102. 二叉树的层序遍历 差不多
- 首先根元素入队
- 当队列不为空的时候
- 求当前队列的长度length
- 依次从队列中取 length个元素进行拓展,然后进入下一次迭代
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrderBottom = function(root) {
if (root === null) return [];
var res = [], queue = [root];
while(queue.length) {
var currentLevelSize = queue.length;
// 从数组前头插入值,避免最后反转数组
res.unshift([]);
for (var i = 0 ;i < currentLevelSize; i++) {
var node = queue.shift();
res[0].push(node.val);
if (node.left != null) queue.push(node.left);
if (node.right != null) queue.push(node.right);
}
}
return res;
};
时间复杂度: O(n), 其中 n 是二叉树的节点数
空间复杂度: O(n)