二叉树:按层输出

2023-11-08 17:10
文章标签 输出 二叉树 按层

本文主要是介绍二叉树:按层输出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    给定一个二叉树,要求从下往上输出每层的元素值。如以下二叉树,则输出的结果为[[15,7],[9,20],[3]]。

    按照二叉树的搜索策略,有宽度优先搜索和深度优先搜索两种方法。

    一、宽度优先搜索方法BFS:把二叉树的节点装进队列里,利用队列先进先出的特点,来按层级的顺序遍历二叉树。这种方法访问顺序与题目要求的输出一致,更为简洁。

  public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> result = new LinkedList<List<Integer>>();if(root == null)return result;LinkedList<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);while(!queue.isEmpty()) {List<Integer> subList = new LinkedList<Integer>();int levelSize = queue.size();    //记录每层的元素个数,每层建立一个subListfor(int i = 0; i < levelSize; i++) {    //按层循环,循环次数为每层的元素个数TreeNode node = queue.poll();    //访问完后从队列删除,保证queue.size()等于每层的元素个数if(node.left != null) queue.offer(node.left);if(node.right != null) queue.offer(node.right);subList.add(node.val);   }result.add(0,subList);    //第一个参数为index,从链表头插入}return result;}

    二、深度优先搜索方法DFS:使用递归算法,把层级数作为参数传递,根据层级数把节点加入到相应的列表中。

   public List<List<Integer>> levelOrderBottom(TreeNode root) {LinkedList<List<Integer>> result = new LinkedList<List<Integer>>();if(root == null)return result;BFS(root, 1, result);Collections.reverse(result);    //要求的结果为BFS返回值的倒序return result;}public void BFS(TreeNode root, int level, LinkedList<List<Integer>> list) {if(root == null)    //到达叶子节点,直接返回return;if(list.size() < level) {    //采用先序遍历,如果list.size<level,说明是该层的第一个节点,需新建一个subListList<Integer> subList = new LinkedList<Integer>();list.add(subList);}list.get(level -1).add(root.val);if(root.left != null) BFS(root.left, level + 1, list);   if(root.right != null) BFS(root.right, level + 1, list);}

这篇关于二叉树:按层输出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/371300

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC