首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java分层打印二叉树_基于Java二叉树层序遍历打印实现

大家好,又见面了,是你们朋友全栈君。 层序遍历思路:若为空,则返回空,否则从第一层开始,即从根节点,从上而下逐层遍历。 1....二叉树层序遍历Ⅰ——剑指offer32-Ⅰ 从上到下,从左到右打印二叉树,返回一维数组int[] res。...二叉树层序遍历Ⅱ——剑指offer32-Ⅱ/LeetCode102 从上到下,从左到右打印二叉树,返回List> res。...二叉树层序遍历Ⅲ——剑指offer32-Ⅲ/LeetCode103 从上到下,按zigzag方式打印(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行),返回List> res。...二叉树层序遍历Ⅳ——LeetCode107 从下到上,从左到右打印二叉树,返回List> res。

29010
您找到你想要的搜索结果了吗?
是的
没有找到

66道前端算法面试题附思路分析助你查漏补缺

从上往下打印二叉树 题目: 从上往下打印二叉树每个节点,同层节点从左至右打印。 思路: 本质上是二叉树层序遍历,可以通过队列来实现。首先将根节点入队。...思路: 对于一个合法而二叉树后序遍历来说,最末尾元素为根元素。...并且每一部分都是一个合法后序序列,因此 们可以利用这些特点来递归判断。 24. 二叉树中和为某一值路径 题目: 输入一颗二叉树和一个整数,打印二叉树中结点值和为输入整数所有路径。...按之字形顺序打印二叉树(待深入理解) 题目: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右顺序打印,第二层按照从右到左顺序打印,即第一行按照 从左到右顺序打印,第二层按照从右到左顺序打印...为了把二叉树每一行单独打印到一行里,我们需要两个变量:一个变量表示在当前层中还 没有打印结点数,另一个变量表示下一次结点数目。 61.

1.7K20

剑指Offer题解 - Day11

从上到下打印二叉树」 力扣题目链接[1] 从上到下打印二叉树每个节点,同一层节点按照从左到右顺序打印。...<= 1000 思路: 从上到下打印二叉树,本质上考查对二叉树「广度优先遍历」。...分析: 使用队列实现广度优先遍历,利用了队列先进先出特性。当节点存在子节点时,依次将他们放入队列末尾。相当于每一层元素在队列里都是相邻,达到了逐层遍历效果。...从上到下打印二叉树 II」 力扣题目链接[2] 从上到下按层打印二叉树,同一层节点按从左到右顺序打印,每一层打印到一行。...达到了每层元素占据二维数组每一项目的。 总结 从上到下打印二叉树需要采用广度优先遍历方法。在此基础上,题目会有所变化,但是核心依旧是要掌握广度优先遍历写法。

16520

今天,带你学会二叉树打印

你好,是吴师兄,今天继续上算法干货。 读完本文,和二叉树打印相关题目你都可以拿下,由于本文图片很多,建议在 WIFI 环境下阅读。...首先是第一道,从上到下打印二叉树每个节点,同一层节点按照从左到右顺序打印,比如给定二叉树 [3,9,20,null,null,15,7]。 ? 返回 [3,9,20,15,7]。...每一次打印一个结点时候,如果该结点有子结点,则把该结点子结点放到一个队列末尾。接下来到队列头部取出最早进入队列结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。...:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右顺序打印,第二层按照从右到左顺序打印,第三行再按照从左到右顺序打印,其他行以此类推。...输出变成了: [ [3], [20,9], [15,7] ] 翻译过来意思就是,奇数层顺序打印,偶数层逆序打印实现思路上可以通过设置一个标志位 isOddNumber 用来判断当前层数是否为奇数层

1.1K60

精读《算法 - 二叉树

二叉树是一种数据结构,并且拥有种类复杂分支,本文作为入门篇,介绍一些基本二叉树题型,像二叉搜索等等不在此篇介绍。...从上到下打印二叉树 从上到下打印二叉树是一道简单题,题目如下: 从上到下按层打印二叉树,同一层节点按从左到右顺序打印,每一层打印到一行。...这道题要求从左到右顺序打印,完全遵循广度优先遍历,我们可以在二叉树递归时,先不要急着读取值,而是按照左、中、右,遇到左右子树节点,就推入栈末尾,利用 while 语句不断循环,直到栈空为止。...假设我们有了这样一个函数 deep 来求二叉树深度,那么这个函数内容是什么呢?二叉树可能存在左右子树,所以 deep 必然是左右子树最大深度最大值 +1(它自己)。...对称二叉树 对称二叉树是一道简单题,题目如下: 请实现一个函数,用来判断一棵二叉树是不是对称。如果一棵二叉树和它镜像一样,那么它是对称

28410

【数据结构】链式二叉树详解

二叉树销毁是不能够从第一层开始销毁,这样我们不能销毁所有的节点,从叶节点开始销毁,递归释放,才能销毁二叉树所有节点 void BinaryTreeDestory(BTNode* root) { if...,返回0 当前节点不为空且左右子节点都为空时,说明该节点为叶节点,返回1 将左子树叶节点与右子树叶节点相加就是二叉树总共叶子结点个数 A走到B,B走到D,D左右节点都为空,D是叶子结点...,返回1,返回到B 再走E左子结点,为空,返回0,走E节点,E节点左右子节点为空,为叶子节点返回1,以此类推 5、二叉树第k层节点个数 int BinaryTreeLevelKSize(BTNode...k层所有个数都可以算到 当我们想要求第三层节点个数时,我们找到BC两棵子树,此时对于BC来说,它们需要找到它第二层节点个数,再向下递归,此时k==1,将它们不为空节点返回1 6、二叉树查找...,为空,打印N,看D右子节点,为空,打印N,最后打印D 去到B右子节点E,以此类推 10、层序遍历与检查二叉树是否为完全二叉树 层序遍历即一层一层遍历,从第一层开始,此时我们需要一个队列,因为队列可以实现先入先出

9310

460道Java后端面试高频题

、中间相等、右边大形式 复制含有随机指针节点链表 两个单链表相交一系列问题 链表中环入口节点 复杂链表复制 7、 二叉树前序、中序、后序遍历递归实现 二叉树前序、中序、后序遍历非递归实现...合并二叉树 二叉树中和为某一值路径 重建二叉树:输入某二叉树前序遍历和中序遍历结果,请重新构造出该二叉树 求一棵完全二叉树节点个数,时间复杂度低于O(N) 找二叉树左下角值 把二叉搜索转换为累加...小和问题:把数组中每一个数左边比当前数小累加起来,叫着这个数组小和 11、矩阵问题 顺时针打印矩阵 将一个正方形旋转90度 之字型打印矩阵 在一个行和列都有序 m 行 n 列矩阵中查找一个数是否存在...结果 汉诺塔问题 打印一个字符串全部子序列,包括空字符串 打印一个字符串全排列 母牛问题:母牛每年生一母牛,新出生母牛成长三年后也能每年生一母牛,假设不会死。...多个线程交替打印:锁、信号量 Semaphore 实现 18、其他 二叉搜索与双向链表:输入一棵二叉搜索,将该二叉搜索转换成一个排序双向链表 数据流中中位数:两个堆实现:最大堆和最小堆 上诉算法题目的详解

81020

面试官问,你会堆排序吗?会,那好你手写一个吧。

每个小节都是按先概念、原理,然后代码实现步骤讲解。如果你也准备入门数据结构和算法,推荐可以看下这个系列教程。 ? 昨天一天一下子肝了 40 多集,从后半部分到图全部部分。...可以看到,每一集其实时间也不算长,短几分钟,长也就半个小时。开 2 倍速看,倍儿爽。 话不多说,下面进入正题。 二叉堆介绍 我们知道,有很多种,最常用就是二叉树了。...二叉树又有满二叉树和完全二叉树。而二叉堆,就是基于完全二叉树一种数据结构。它有以下两个特性。 首先它是一个完全二叉树 其次,堆中任意一个父节点值都大于等于(或小于)它左右孩子节点。...(小顶堆同理) 构建二叉堆 二叉堆定义我们知道了,那么给你一个无序完全二叉树,怎么把它构建成二叉堆呢? 我们以大顶堆为例。...它基本思想就是: 把当前数组构建成一个大顶堆。 此时,根节点肯定是所有节点中最大值,让它和末尾元素交换位置,则最后一个元素就是最大值。

77120

二叉树遍历:先序中序后序遍历递归与非递归实现及层序遍历

二叉树是一种基本数据结构,是一种每个节点儿子数目都不多于2。...由于可以通过递归来定义,所以常见操作用递归实现常常是方便清晰。...代码如下(关于二叉树建立请戳): /* 输入:ABDH##I##E##CF#J##G## */ #include typedef struct BTNode* Position;...故我们需要按照根节点-右儿子-左儿子顺序遍历,而我们已经知道先序遍历顺序是根节点-左儿子-右儿子,故只需将先序遍历左右调换并把访问方式打印改为压入另一个栈即可。最后一起打印栈中元素。...这种遍历方式结果是将二叉树从上到下,从左至右一层一层遍历,即层序遍历,代码实现如下: void LevelOrderTraversal(BinTree BT) { BinTree T;

1.4K60

从上到下打印二叉树——层序遍历二叉树

题目:从上往下打印二叉树每个结点,同一层结点按照从左到右顺序打印。...二叉树结点定义如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode...*m_pRight; }; 从上到下打印二叉树规律:每一次打印一个结点时候,如果该结点有子结点,则把该结点子结点放到一个队列末尾。...接下来到队列头部取出最早进入队列结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。 既然我们已经确定数据容器是一个队列了,现在问题就是如何实现队列。...实际上我们无需自己动手实现,因为STL已经为我们实现了一个很好deque(两端都可以进出队列)。

76390

额外空间复杂度O(1) 二叉树遍历 → Morris Traversal,你造吗?

前情回顾 二叉树遍历 → 不用递归,还能遍历吗中讲到了二叉树深度遍历实现方式:递归、栈+迭代   不管采用何种方式,额外空间复杂度都是 O(N)   那有没有额外空间复杂度 O(1) 遍历方式了...二叉树叶子节点,或者只有单个孩子节点(左指针空闲或右指针空闲)   具体实现,我们往下看   移动规则   也就是遍历过程;设当前节点为 cur ,初始 cur = root ,则 cur 移动规则如下...向右移动   3、当 cur 为 null 时,遍历停止   这描述还是有点抽象,我们结合具体二叉树,利用移动规则把二叉树遍历一遍   初始二叉树如下   1)初始 cur 在节点 a,此时 cur...5、整棵右边界:a -> c,逆序打印就是:c -> a   把逆序列串起来:d -> h -> k -> e -> b -> g -> f -> c -> a,这就是 后序序列   问题又来了,...我们先看个极端案例   它时间复杂度是 2 * O(N),这个没什么问题吧?

43620

图解堆排序,详细!

写在前面: 大家好,是时光。 今天给大家带来是排序算法中堆排序,这种排序跟二叉树相关。采用图解方式讲解,争取写透彻。话不多说,开始! 思维导图: ?...完全二叉树 完全二叉树:叶子节点全部都在最底两层;最后一层缺少右边叶子节点,左边一定有叶子节点;除了最后一层,其他层节点个数均达到最大值; 1.4,最大堆和最小堆 最大堆:堆顶是整个堆中最大元素...2.1,第一个步骤,初始化堆 我们先来看看数组是如何存储二叉树 ? 注意:这里考虑的当前节点,必须是完全二叉树非叶子节点。并且节点左孩子和右孩子必须小于数组长度,所以后面需要添加限制条件。...,应该为最大元素9 System.out.println(arr[0]); return arr; } 上述代码就是从完全二叉树第一个非叶子节点开始调换,还顺便打印堆顶元素...初始化堆结束 2.2,第二个步骤,堆排序 堆排序过程就是将堆顶元素(最大值或者最小值)与二叉堆末尾叶子节点进行调换,不停调换,直到二叉堆顺序变成从小到大或者从大到小,也就实现了我们目的。

40540

数据结构

i右孩子 i父节点 i所在层次 二叉树顺序存储中,一定要把二叉树节点编号和完全二叉树一一对应起来 链式存储 二叉链表 找到节点p左右孩子节点时间复杂度低 但是找某个节点父节点...int treeDepth(BiTree T) { //接收二叉树节点作为参数,通常是根节点 if(T == NULL) { //如果传入节点是NULL,则返回0,因为空高度为0 return...,都要递归实现,并递归返回条件是传入节点为空 设计算法按前序次序打印二叉树叶子结点 void PrintLeaves(BiTree T) { if(T == NULL) {...} if(T -> lchild == NULL && T -> rchild == NULL) { //判断是否为叶子节点 printf("%d",T->data); // 打印叶子节点...} PrintLeaves(T -> lchild); //递归处理左子树 PrintLeaves(T -> rchild); //递归处理右子树 } 前序序列打印所有节点 和打印叶子节点相比

10310

判断一棵满二叉树是否为二叉搜索

题目描述: 给定一棵满二叉树,判定该是否为二叉搜索,是的话打印 True,不是的话打印 False。 说明: a....满二叉树,除最后一层无任何子节点外,每一层上所有结点都有两个子结点二叉树 c....刚开始出了这样代码: def judgeBST(self, root): if not root: return True if root.left...使用中序遍历方法实现: 对进行中序遍历,将结果保存在 temp 数组中; 检测 temp 数组是否为升序排列,如果是,则为 BST,反之则不是。...此方法还可以进一步优化,不用 temp 数组,避免使用额外内存开销。在中序遍历时使用一个全局变量 pre 保存前驱节点,如果当前节点值小于前驱节点值 pre.val,则该不是 BST。

1.2K10

拿下 BAT+华为校招 200 题 LeetCode 高频题库

offer42/53-连续子数组最大和/最大子序和(最值不一定是末尾) 152-乘积最大子数组(最值不一定是末尾) 300-最长递增子序列(最值不一定是末尾) 334-递增三元子序列 221-最大正方形...(这个主要是因为队列两端都可操作)) 232/offer09-栈实现队列/用两个栈实现队列(两个栈,一个栈不行(因为栈只能一端操作)) offer31/946-栈压入、弹出序列(用一个栈模拟入栈和出栈过程...) offer32-从上到下打印二叉树(queue) offer32-二叉树层序遍历/从上到下打印二叉树 2(queue) offer32-二叉树锯齿形层次遍历/从上到下打印二叉树 3(queue...、递归方式) offer33-二叉搜索后序遍历序列(递归、单调栈) offer07/105-重建二叉树/从前序与中序遍历序列构造二叉树(递归方式) 654-最大二叉树(递归,类似之前重建二叉树...) 236-二叉树最近公共祖先(递归*2、存储父节点) offer26-子结构(递归) offer55/104-二叉树深度/二叉树最大深度(递归、层序遍历) 543-二叉树直径(递归 + 求高度

2.4K30

Python 算法基础篇:二叉树实现与应用

Python 算法基础篇:二叉树实现与应用 引言 二叉树是常用非线性数据结构,它们在算法和程序设计中有着广泛应用。本篇博客将重点介绍二叉树原理、实现以及它们在不同场景下应用。...config 在这个例子中,根目录 / 是根节点, home 和 etc 是根目录子目录, user 是 home 目录子目录, documents 和 pictures 是 user 目录子目录...二叉树实现与应用 4.1 二叉树实现 下面是二叉树 Python 实现: class BinaryTreeNode: def __init__(self, val): self.val...类中方法包括:添加节点 add_node ,根据给定节点值将新节点添加到合适位置;搜索节点 search_node ,在二叉树中搜索给定值节点;打印二叉树内容 display ,按照中序遍历方式打印二叉树内容...在实际应用中,我们可以使用平衡二叉树来维护有序数据,或者用于实现高效数据查找功能。 总结 本篇博客重点介绍了二叉树概念、实现和应用。

47220

又一个自动生成项目目录组件tree-cli,快速生成Readme项目结构

Tree-cli 是一个递归目录结构程序,可生成深度缩进文件列表。 没有指定参数时参数,tree 会列出当前目录中文件。...tree --help 指定目录层级(深度): tree -l 2 将结果输出到文件: tree -l 2 -o out.txt 输出目录: tree -l 2 -o out.txt -d 这里要注意一下...在检测到时将避免会导致递归符号链接。 --noreport:省略在列表末尾打印文件和目录报告,并省略在控制台上打印。 --base:指定根目录。来自cwd根相对路径和绝对路径均可接受。...此参数是可选。 -a:打印所有文件。默认情况下,tree不打印隐藏文件(以点“。”开头文件)。决不会打印文件系统构造“。”。(当前目录)和“ ..”(上一个目录)。 -d:仅列出目录。...-i:使打印缩进线,与-f选项一起使用时很有用。 -l:目录最大显示深度。 -o:将输出发送到文件名。

2.2K31

剑指Offer面试题:21.从上到下打印二叉树

一、题目:从上到下打印二叉树 题目:从上往下打印二叉树每个结点,同一层结点按照从左到右顺序打印。例如输入下图中二叉树,则依次打印出8、6、10、5、7、9、11。 ?   ...二叉树节点定义如下,采用C#语言描述: public class BinaryTreeNode { public int Data { get; set; }...(广度优先遍历)算法:   每一次打印一个结点时候,如果该结点有子结点,则把该结点子结点放到一个队列末尾。...接下来到队列头部取出最早进入队列结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。 扩展:如何广度优先遍历一个有向图?这同样也可以基于队列实现。...是图一种特殊退化形式,从上到下按层遍历二叉树,从本质上来说就是广度优先遍历二叉树

55530

准备下次编程面试前你应该知道数据结构

无论你解决什么问题,你都必须以这种或那种方式处理数据比如员工工资,股票价格,购物清单,甚至简单电话簿等等。 根据不同场景,数据需要以特定格式存储。...下图是一个简单,以及在型数据结构中所用基本术语: 下面是几种类型: N 叉 平衡 二叉树 二叉搜索 平衡二叉树 红黑 2-3 其中,二叉树和二叉搜索是最常用。...常问面试问题: 找到一个二叉树高度 找到一个二叉搜索中第 k 个最大值 找到距离根部“k”个距离节点 找到一个二叉树中给定节点祖先(ancestors) 字典 字典,也叫“前缀”,是一种树形结构...”末尾。...常见字典面试问题: 计算字典总字数 打印存储在字典所有单词 使用字典对数组元素进行排序 使用字典从字典中形成单词 构建一个T9字典 哈希表 散列是一个用于唯一标识对象并在一些预先计算唯一索引

1.2K10
领券