当前位置: 首页 > news >正文

【Java】/* 与树有关的一些概念 */

一、关于树的一些概念

1. 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

        ① 有一个特殊的结点,称为根结点,根结点没有前驱结点。

        ② 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 <= i <= m) 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。

        ③ 树是递归定义的。

2. 注意:

        ① 子树是不相交的。

        ② 除了根节点外,每个节点有且仅有一个父结点。

        ③ 一颗N个节点的树有N-1条边。

3. 一些重要概念:

结点的度:一个结点含有子树的个数称为该结点的度; 如上图:A的度为6。

树的度:一棵树中,所有结点度的最大值称为树的度; 如上图:树的度为6。

叶子结点或终端结点:度为0的结点称为叶结点; 如上图:B、C、H、I...等节点为叶结点

双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点; 如上图:A是B的父结点。

孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点; 如上图:B是A的孩子结点。

根结点:一棵树中,没有双亲结点的结点;如上图:A。

结点的层次==节点的深度:从根开始定义起,根为第1层,根的子结点为第2层,以此类推

树的高度:树中结点的最大层次; 如上图:树的高度为4。

=====================================================================

树的以下概念只需了解,在看书时只要知道是什么意思即可:

① 非终端结点或分支结点:度不为0的结点; 如上图:D、E、F、G...等节点为分支结点。

② 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点。

③ 堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为兄弟结点。

④ 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先。

⑤ 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙。

⑥ 森林:由m(m>=0)棵互不相交的树组成的集合称为森林。

4. 树的应用:文件系统管理(文件夹)

二、关于二叉树的概念

1. 二叉树除叶子节点外,其他的节点的度都小于等于2。

2. 二叉树的子树有左右之分,次序不能颠倒。

3. 节点个数为0 或 1的树也可以被认为是二叉树。

4. 二叉树中特殊的两种树:

① 满二叉树:除叶子节点以外,其他的节点的度都为2。

② 完全二叉树:从上到下,从左至右,依次排放。满二叉树是特殊的完全二叉树。

5. 二叉树的性质:

① 若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有 (i>0)个结点

② 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是(k>=0)

③ 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1 ④ 具有n个结点的完全二叉树的深度k为上取整。

⑤ 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,则对于序号为i 的结点有:

     - 若i>0,双亲序号:(i-1)/2;i=0,i为根结点编号,无双亲结点

     - 若2i+1 < n,左孩子序号:2i+1,否则无左孩子

     - 若2i+2 < n,右孩子序号:2i+2,否则无右孩子

6. 题目:

- 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为200个。

- 2.在具有 2n 个结点的完全二叉树中,叶子结点个数为n。

  解答:2n = n0 + n1 + n2,由于2n一定是偶数,则n1 = 1,2n = n0 + n0 - 1 + 1,得n = n0

- 一个具有767个节点的完全二叉树,其叶子节点个数为384。

  解答:767 = n0 + n1 + n2,由于767为奇数,则n1 = 0,767 = n0 + n0 - 1, n0 = 384

- 一棵完全二叉树的节点数为531个,那么这棵树的高度为10。

  解答:由性质4可知 532 在 2 的9 ~ 10次方之间,由于结果向上取整,则树的高度为10。

7. 二叉树的存储方式也分为 顺序存储 和 链式存储二叉树基本操作部分的代码采用链式存储,节点的表示形式用左右孩子表示法来表示。

8. 二叉树的遍历方式:

    ① 前序遍历:根 左 右

    ② 中序遍历:左 根 右

    ③ 后序遍历:左 右 根

    ④ 层序遍历:从上到下,从左到右,依次遍历。

9. 题目:

- 写出下图的前中后序遍历

   答:前序:ABDEHCFG

          中序:DBEHAFCG

          后序:DHEBFGCA

- 某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为:ABDHECFG。

  答:依据题意画出图形:

- 二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为E。

  答:根据先序,中序遍历画出图形如下图:

- 设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历序列为abcde。

  答:根据中序,后序遍历画出图形如下图:(d之所以连c不连e是因为,如果e有子,则横向看一定不会隔一个父节点

- 某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF ,则按层次输出(同一层从左到右)的序列为FEDCBA。

  答:根据中序,后序遍历画出图形如下图:

【总结】:画图的关键点,前序的第一个节点一定是根节点,后序的最后一个节点一定是根节点,画图时左侧侧边栏为前序/后续,且一定要以根节点开头,下侧侧边栏为中序。

相关文章:

  • u盘突然说要格式化才能访问?如何跳过格式化打开U盘
  • Java Web —— 第八天(登录功能)
  • SmartPing-记录下
  • Tita的OKR :产品经理的OKR
  • 测试用例(还需要输入1个字)
  • 背包问题【算法 07】
  • 自然语言处理系列三十二》 语义相似度》语义相似度概念及入门
  • Python爬虫-实现自动获取随机请求头User-Agent
  • ArcGIS高/低聚类(Getis-Ord General G)——探究人口空间格局的20年变迁
  • WPS关闭后,进程依然在后台运行的解决办法
  • AI绘画SD三分钟入门教程!秋叶大佬8月最新的Stable Diffusion整合包V4.9来了,完整安装部署教程奉上,附各种模型插件一次性用爽!
  • 云 VS 边缘计算,关系与区别是什么?
  • SIP协议之匿名呼叫
  • 【数据结构篇】~栈和队列(附源码)
  • 终端防火墙软件功能 | 在终端设备上启用防火墙!终端安全小课堂开讲啦
  • 【前端学习】-粗谈选择器
  • 4个实用的微服务测试策略
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Angular4 模板式表单用法以及验证
  • Apache Zeppelin在Apache Trafodion上的可视化
  • DOM的那些事
  • ES6核心特性
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • exif信息对照
  • extjs4学习之配置
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 数据科学 第 3 章 11 字符串处理
  • 与 ConTeXt MkIV 官方文档的接驳
  • 第二十章:异步和文件I/O.(二十三)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • !!java web学习笔记(一到五)
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • (16)Reactor的测试——响应式Spring的道法术器
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转载)从 Java 代码到 Java 堆
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)虚函数剖析
  • ./configure,make,make install的作用
  • ./configure、make、make install 命令
  • .Net core 6.0 升8.0
  • .net framework4与其client profile版本的区别
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET连接数据库方式
  • .NET上SQLite的连接
  • .NET下ASPX编程的几个小问题
  • //解决validator验证插件多个name相同只验证第一的问题