LeetCode 102. 二叉树的层序遍历
时间:2022-07-22
本文章向大家介绍LeetCode 102. 二叉树的层序遍历,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
解题
因为是层次遍历
如果直接用手算的话,可以得到结果:3、9、20、15、7
我在这篇文章中说明了二叉树遍历算法: https://blog.csdn.net/qq_17623363/article/details/106612418 其中包括了二叉树的层次遍历。
在层次遍历的时候,我们只需要遍历出来某一层的数据,把这一层的数据加入到List中,然后把这个List加入到最终的list中,最后返回即可
难点在于如何统计。
统计每一层节点的数据:
1、当每一层都入队之后获取这个队列的数量,这个数量就是每一层的节点的数量 2、然后根据这个数量来循遍历出队列中现在存在的每一层的数据 3、循环1和2至此结束
关键代码:
static public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> lists = new ArrayList<>();
//如果直接传入的是空,那就直接返回
if(root==null)
return lists;
//利用队列的特性来存储每层的节点
LinkedList<TreeNode> queue = new LinkedList<>();
//默认根节点已经加入到队列
queue.add(root);
while(!queue.isEmpty()){
List<Integer> list = new ArrayList<>();
int n = queue.size();//记录当前层次的数量
int index = 0;
//只要每层遍历的次数符合每层的数量就算是遍历的这同一层的节点。
while (index<n){
root = queue.pop();
//添加到每一层的List中
list.add(root.val);
if(root.left!=null) {
queue.add(root.left);
}
if(root.right!=null) {
queue.add(root.right);
}
//索引++ 遍历同一层次后边的节点
index++;
}
//把每一层的节点加入到最终的List中
lists.add(list);
}
return lists;
}
全部代码:
package tree.层次遍历二叉树;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
class Solution {
public static void main(String[] args) {
TreeNode t1 = new TreeNode(1);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(3);
TreeNode t4 = new TreeNode(4);
TreeNode t5 = new TreeNode(5);
t1.left=t2;
t1.right=t3;
t2.left=t4;
t2.right=t5;
System.out.println();
System.out.println("层次遍历:");
List<List<Integer>> lists = levelOrder(t1);
System.out.println("结果:"+lists.toString());
System.out.println("遍历结果:");
lists.stream().forEach(li -> {
li.stream().forEach(ll -> {
System.out.print(ll.intValue()+" ");
});
System.out.println();
});
}
static public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> lists = new ArrayList<>();
//如果直接传入的是空,那就直接返回
if(root==null)
return lists;
//利用队列的特性来存储每层的节点
LinkedList<TreeNode> queue = new LinkedList<>();
//默认根节点已经加入到队列
queue.add(root);
while(!queue.isEmpty()){
List<Integer> list = new ArrayList<>();
int n = queue.size();//记录当前层次的数量
int index = 0;
//只要每层遍历的次数符合每层的数量就算是遍历的这同一层的节点。
while (index<n){
root = queue.pop();
//添加到每一层的List中
list.add(root.val);
if(root.left!=null) {
queue.add(root.left);
}
if(root.right!=null) {
queue.add(root.right);
}
//索引++ 遍历同一层次后边的节点
index++;
}
//把每一层的节点加入到最终的List中
lists.add(list);
}
return lists;
}
}
class TreeNode {
int val;//每个节点存放的数据
TreeNode left;//左节点
TreeNode right;//右节点
TreeNode(int x) { val = x; }
}
- Flash/Flex学习笔记(47):反向运动学(上)
- 汉诺塔问题算法介绍
- Flash/Flex学习笔记(36):自己动手实现一个滑块控件(JimmySilder)
- 使用Zabbix服务端本地邮箱账号发送报警邮件及指定报警邮件操作记录
- fckeditor上传问题的解决
- Flash/Flex学习笔记(46):正向运动学
- 异步Socket处理的一些测试值
- .Net中DES加密的细节问题
- 分布式监控系统Zabbix--完整安装记录 -添加web页面监控
- .Net中使用带UI的OCX的方法
- 2017数据科学领域15大热门GitHub项目
- 简单分页的性能优化
- Flash/Flex学习笔记(42):坐标旋转
- 分布式监控系统Zabbix-完整安装记录 -添加端口监控
- 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 多线程及线程数控制实现
- CTF考点总结-sql注入篇
- dotnet OpenXML 为什么资源使用 Relationship 引用
- k8s部署Kafka集群
- 彻底搞懂 etcd 系列文章(六):etcd 核心 API v3
- Open3d学习计划—7(RGBD测程法)
- 一次信息泄露引发的越权
- MySQL 调优 | OPTIMIZER_TRACE 详解
- 这次被坑惨了,MySQL的隐式转换导致了一个线上BUG
- iOS开发之UIMenu
- mysql必会技能-基本操作
- 移动端跨平台技术之下的变与不变
- java-JDBC操作Mysql
- 【深度知识】25种区块链共识算法全面详解
- 聊聊 resolv.conf 中 search 和 ndots 配置