Leetcode102. 二叉树的层序遍历
时间:2021-09-04
本文章向大家介绍Leetcode102. 二叉树的层序遍历,主要包括Leetcode102. 二叉树的层序遍历使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Leetcode102. 二叉树的层序遍历
题目描述
/**
* 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。
* (即逐层地,从左到右访问所有节点)。
*/
思路分析
- 二叉树的层序遍历,及一层一层的遍历二叉树,将每一层的节点值记录在集合中,再将每一层的结果记录到容器并返回
- 由题意,使用广度优先的思想
- 对每一层的所有节点维护一个队列和一个保存节点值的集合,每次遍历该层所对应队列中的节点,将其值保存到该层所对应的集合中,并判断当前节点是否含有子节点,如果有,则再将其放入到下一层节点所对应的队列中,依次类推
- 最后当队列为空时,说明所有层的所有节点全部遍历完毕
- 详细思路见下
源码及分析
/**
*
* @param root 根节点
* @return 返回按层序遍历的节点值
*/
public List<List<Integer>> levelOrder(TreeNode root) {
//创建集合保存结果
List<List<Integer>> res = new ArrayList<>();
//数据校验
if (root == null){
return res;
}
//维护一个队列保存当前层的节点对象
Queue<TreeNode> queue = new LinkedList<>();
//先将根节点放入队列
queue.offer(root);
//使用广度优先思想遍历每一层的节点
while (!queue.isEmpty()){
//创建集合保存每一层的节点值
ArrayList<Integer> list = new ArrayList<>();
//记录每一层的节点个数,用于遍历
int currentSize = queue.size();
//层层遍历
for (int i = 0; i < currentSize; i++) {
//去除队列中的节点
TreeNode node = queue.poll();
//将其值记录到集合中
list.add(node.val);
//判断当前节点有没有子节点,如果有则入队列作为下一层遍历其值
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
}
//记录结果
res.add(list);
}
return res;
}
节点类
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
原文地址:https://www.cnblogs.com/mx-info/p/15225863.html
- spark2 sql读取json文件的格式要求
- 容器化RDS|调度策略
- Go语言并发编程总结
- hdu------(4302)Holedox Eating(树状数组+二分)
- spark2的SparkSession思考与总结2:SparkSession有哪些函数及作用是什么
- GO语言并发编程之互斥锁、读写锁详解
- spark2.2 SparkSession思考与总结1
- 【译】Spring 官方教程:Spring Security 架构
- hdu----(4301)Divide Chocolate(状态打表)
- hdu------(4300)Clairewd’s message(kmp)
- TensorFlow ML cookbook 第一章7、8节 实现激活功能和使用数据源
- Go语言struct类型详解
- spark1.x升级spark2如何升级及需要考虑的问题
- 使用 kubeadm 创建一个 kubernetes 集群
- 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 数组属性和方法