二叉树:按层输出

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

相关文章

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

如何将一个文件里不包含某个字符的行输出到另一个文件?

第一种: grep -v 'string' filename > newfilenamegrep -v 'string' filename >> newfilename 第二种: sed -n '/string/!'p filename > newfilenamesed -n '/string/!'p filename >> newfilename

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

LibSVM学习(五)——分界线的输出

对于学习SVM人来说,要判断SVM效果,以图形的方式输出的分解线是最直观的。LibSVM自带了一个可视化的程序svm-toy,用来输出类之间的分界线。他是先把样本文件载入,然后进行训练,通过对每个像素点的坐标进行判断,看属于哪一类,就附上那类的颜色,从而使类与类之间形成分割线。我们这一节不讨论svm-toy怎么使用,因为这个是“傻瓜”式的,没什么好讨论的。这一节我们主要探讨怎么结合训练结果文件

下载/保存/读取 文件,并转成流输出

最近对文件的操作又熟悉了下;现在记载下来:学习在于 坚持!!!不以细小而不为。 实现的是:文件的下载、文件的保存到SD卡、文件的读取输出String 类型、最后是文件转换成流输出;一整套够用了; 重点: 1:   操作网络要记得开线程; 2:更新网络获取的数据 切记用Handler机制; 3:注意代码的可读性(这里面只是保存到SD卡,在项目中切记要对SD卡的有无做判断,然后再获取路径!)

彻底解决win10系统Tomcat10控制台输出中文乱码

彻底解决Tomcat10控制台输出中文乱码 首先乱码问题的原因通俗的讲就是读的编码格式和写的解码格式不一致,比如最常见的两种中文编码UTF-8和GBK,UTF-8一个汉字占三个字节,GBK一个汉字占两个字节,所以当编码与解码格式不一致时,输出端当然无法识别这是啥,所以只能以乱码代替。 值得一提的是GBK不是国家标准编码,常用的国标有两,一个是GB2312,一个是GB18030 GB1