二叉树的层次遍历 II
时间:2022-07-24
本文章向大家介绍二叉树的层次遍历 II,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历。
示例
给定二叉树 [3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回其自底向上的层次遍历为
[
[15,7],
[9,20],
[3]
]
题解
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrderBottom = function(root) {
if(!root) return [];
var queue = [root];
var target = [];
while(queue.length){
let tmp = [];
let levelSize = queue.length;
for(let i=0;i<levelSize;++i){
let cur = queue.shift();
tmp.push(cur.val);
if(cur.left) queue.push(cur.left);
if(cur.right) queue.push(cur.right);
}
target.unshift(tmp);
}
return target;
};
思路
树的层次遍历可以使用广度优先遍历实现,题目中要求得到从叶子节点到根节点的层次遍历,只需要在最后推入数组的时候将其推入目标数组头部即可,首先判断是否是空树,空树直接返回空数组即可,定义一个队列并将根节点置入,之后定义目标数组,在队列不空的时候执行循环,定义层次缓存数组,定义该层次的节点数量,之后遍历该层次节点,取出队首节点将值推入缓存数组,如果存在左节点就将左节点推入队列,如果存在右节点就将右节点推入队列,之后将缓存数组推入目标数组头部,最后返回目标数组即可。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/solution/er-cha-shu-de-ceng-ci-bian-li-ii-by-leetcode-solut/
- ASM 翻译系列第二十二弹:ASM Internal ASM file number 8
- Ghost安装Win7/XP后自动恢复IP的批处理
- ASM 翻译系列第二十三弹:ASM Internal ASM files number 12 and 254
- Shell脚本的简单排错法及调试程序bashdb
- ASM 翻译系列第二十四弹:ASM Internal ASM files number 10 and 11
- Redhat设置NFS挂载的简单步骤
- WordPress后台首页显示RSS错误的解决办法
- ASM 翻译系列第十九弹:ASM Internal ASM Continuing Operations Directory
- ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete
- ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data
- LVS+Keepalived负载均衡主备&双主架构全攻略
- ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table
- ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table
- MySql常用30种SQL查询语句优化方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解shell脚本case条件语句,开发各种服务启动脚本跳板机
- 详解自动交互命令expect,免去手动输入!
- 快速掌握shell脚本的各种循环语句
- 详解shell脚本的4种表达式
- Linux shell中这7种运算命令值得掌握!
- 快速掌握shell脚本数组,看这篇
- 详解shell脚本的环境、普通、特殊变量
- 玩转zabbix之超详细的二进制安装
- 玩转zabbix之源码编译安装,添加主机监控
- 总结一篇shell调试技巧及常见的脚本错误
- 备战金九银十:当你裸辞遇到了面试难,你需要了解一下这些面试题
- 看完这7个测试常见问题总结,你的面试就成功了80%
- geant4入门讲解篇-2
- Geant4-怎样设置你的粒子源--精简注释+收藏版
- Geant4--一次编译,运行多个Run,极大提升模拟效率