二叉树

定义

二叉树n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。

图解

二叉树特点

由二叉树定义以及图示分析得出二叉树有以下特点:

  1. 每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。
  2. 左子树和右子树是有顺序的,次序不能任意颠倒。
  3. 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

二叉树性质

由二叉树定义以及图示分析得出二叉树有以下性质:

  1. 若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点有如下特性:

  • 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;
  • 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;
  • 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。

斜树

定义

斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。

满二叉树

图解

定义

满二叉树:在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。

满二叉树的特点

满二叉树的特点有:

  1. 叶子只能出现在最下一层。出现在其它层就不可能达成平衡。
  2. 非叶子结点的度一定是2。
  3. 在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。

完全二叉树

图解

定义

完全二叉树:对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。

完全二叉树特点

特点

  1. 叶子结点只能出现在最下层和次下层。
  2. 最下层的叶子结点集中在树的左部。
  3. 倒数第二层若存在叶子结点,一定在右部连续位置。
  4. 如果结点度为1,则该结点只有左孩子,即没有右子树。
  5. 同样结点数目的二叉树,完全二叉树深度最小。
  6. :满二叉树一定是完全二叉树,但反过来不一定成立。

二叉树的存储结构

定义

二叉树的顺序存储结构就是使用一维数组存储二叉树中的结点,并且结点的存储位置,就是数组的下标索引。

图解

如图一棵完全二叉树按照顺序存储:

二叉树遍历

定义

二叉树的遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。

访问次序

二叉树的访问次序可以分为四种:

  1. 前序遍历 根结点 > 左子树 > 右子树
  2. 中序遍历 左子树> 根结点 > 右子树
  3. 后序遍历 左子树 > 右子树 > 根结点
  4. 层序遍历 仅仅需按层次遍历就可以

图解

前序遍历

定义

前序遍历通俗的说就是从二叉树的根结点出发,当第一次到达结点时就输出结点数据,按照先向左在向右的方向访问。

遍历流程
1、从根结点出发,则第一次到达结点A,故输出A;
2、继续向左访问,第一次访问结点B,故输出B;
3、按照同样规则,输出D,输出H;
4、当到达叶子结点H,返回到D,此时已经是第二次到达D,故不在输出D,进而向D右子树访问,D右子树不为空,则访问至I,第一次到达I,则输出I;
5、I为叶子结点,则返回到D,D左右子树已经访问完毕,则返回到B,进而到B右子树,第一次到达E,故输出E;
6、向E左子树,故输出J;
7、按照同样的访问规则,继续输出C、F、G;
遍历结果

前序遍历输出为:ABDHIEJCFG

中序遍历

定义

中序遍历就是从二叉树的根结点出发,当第二次到达结点时就输出结点数据,按照先向左在向右的方向访问。

遍历流程
1、从根结点出发,则第一次到达结点A,不输出A,继续向左访问,第一次访问结点B,不输出B;继续到达D,H;
2、到达H,H左子树为空,则返回到H,此时第二次访问H,故输出H;
3、H右子树为空,则返回至D,此时第二次到达D,故输出D;
4、由D返回至B,第二次到达B,故输出B;
5、按照同样规则继续访问,输出J、E、A、F、C、G;
遍历结果

中序遍历输出为:HDIBJEAFCG

最后

小编精心为大家准备了一手资料

**点击这里免费领取**以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术

【附】架构书籍赠送

  1. BAT面试的20道高频数据库问题解析
  2. Java面试宝典
  3. Netty实战
  4. 算法

BATJ面试要点及Java架构师进阶资料

构书籍赠送

  1. BAT面试的20道高频数据库问题解析
  2. Java面试宝典
  3. Netty实战
  4. 算法

[外链图片转存中…(img-SPzylXRT-1625668880783)]

BATJ面试要点及Java架构师进阶资料

[外链图片转存中…(img-BepDf3ok-1625668880784)]

全网首发!javafor循环跳出循环相关推荐

  1. 借花献佛!javafor循环跳出循环

    二叉树 定义 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的.分别称为根结点的左子树和右子树组成. 图解 二叉树特点 由二叉树定义以及 ...

  2. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))

    题目描述: 我们知道平凡的栈有几个操作: push(value) 将 value 压入栈 pop() 将栈顶元素弹出, 并返回这个弹出的元素. 现在我们想要在平凡栈的基础上实现以下几个操作: push ...

  6. 全网首发!老大众奥迪碟盒通信协议破解,可以模拟数码碟盒,外接AUX蓝牙U盘等音频设备

    文章目录 前言 什么是碟盒? 碟盒接口定义 车机与碟盒之间的通信协议 主机向碟盒发送数据协议 数据帧格式 逻辑分析仪真机抓包分析 起始信号波形: 数据0信号波形: 数据1信号波形: 逻辑分析仪抓包分析 ...

  7. 全网首发,大众奥迪领驭帕萨特DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

    文章目录 全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙播放音乐功能 前言 1.设计指标 2.方案设计 2.1.外壳选择 2.2.蓝牙方案 2.3.MCU方案 3.原理图设计 4.PCB设计 5.程 ...

  8. 奥利奥0糖系列全网首发;雀巢芭绮率先入驻哈尔滨;疫情后红参需求大幅上升...

    雀巢.每日优鲜.奥利奥.韩国人参公社.美国流行威士忌酩帝诗等企业最新动态. 新店开业 雀巢旗下巧克力品牌芭绮正式进入中国 雀巢宣布在哈尔滨中央大街开设意式甜品店,为广大消费者提供意大利国宝级巧克力品牌 ...

  9. 软件测试面试必看,资深测试工程师面试题集锦 全网首发

    全网首发,最牛的全套软件测试  ,自动化测试面试题,这些面试题都在文章末尾,有需要的可以自取 废话少说直接开始咱们今天的整体内容, 1.自我介绍? 我是谁.工作几年.你上家公司做什么.负责什么.你的优 ...

最新文章

  1. 下列那个语句在python中是非法的_下列哪个语句在Python中是非法的()A.x=y=z=1B.x=(y=z+1)C.x,y=y,xD...
  2. java list数据的更新,java – ObservableList不更新ArrayList
  3. Qt for Android获取手机热点开关状态
  4. AAAI 2022 | 可解释和鲁棒的联合文本分类及证据提取
  5. G. GCD Festival(莫比乌斯、欧拉函数)
  6. php 判断心跳包报错,第29问:MySQL 的复制心跳说它不想跳了
  7. bigdecimal如何做除法_二胎家庭如何平衡两个孩子的关系?聪明的父母都懂这四个法则...
  8. 如何使用JavaScript控制台:超越console.log()
  9. Eclipse Scout架构商业应用开发的工具与环境
  10. 排序算法之六 堆排序(C++版本)
  11. web.xml 加载顺序
  12. win8怎么被远程计算机关闭,Win8系统局域网如何远程关机?Win8系统局域网远程关机的方法...
  13. JSP——在JSP中嵌入java代码
  14. 流媒体有哪些播放方式?流媒体视频三种播放方式介绍
  15. cocos2d-x3.2中用shader使图片背景透明
  16. 欧洲为何没有互联网巨头?
  17. 三种设置session有效时间的方法
  18. JAVA有percentile函数吗_五分位算法
  19. 如何聪明的提问(转载)
  20. nvl() 和nvl2()

热门文章

  1. ubuntu更新软件包
  2. 这些前后端性能指标,面试一问我就懵了
  3. 音视频学习之ffmpeg时间戳相关整理(时间基tbr,tbn,tbc)
  4. TSP(中国旅行商问题)
  5. 正则表达式(参考百度词条)
  6. python算法教程百度云_如何用免费GPU学习AI算法?这篇算法资源大集锦别错过
  7. 网购车平台易车与汽车之家
  8. python+django+vue+Elementui人力资源管理系统
  9. shell的并行执行
  10. 【艺赛旗RPA流程开发课堂】如何使用结构化数据拾取