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

C++数据结构-树的概念及分类介绍(基础篇)

1.什么是树

树是数据结构中的一种,其属于非线性数据结构结构的一种,我们前文所提到的数据结构多数都是线性的,这也是较为简单的数据结构,而接下来的树与图均属于非线性数据结构,也是概念极多的一类。

树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。

树的定义:n个节点组成的有限集合。n=0,空树;n>0,1个根节点,m个互不相交的有限集,每个子集为根的子树。

如图所示,图为一颗树:

ce0d53bc0b5d4df78a047de0549f8d94.png

2.树的基本术语

l  节点的度:树中某个节点的子树的个数。

l  树的度:树中各节点的度的最大值。

l  分支节点:度不为零的节点。

l  叶子节点:度为零的节点。

l  路径:i->j;路径长度:路径经过节点数目减1。

l  孩子节点:某节点的后继节点;双亲节点:该节点为其孩子节点的双亲节点(父母节点);兄弟节点:同一双亲的孩子节点;子孙节点:某节点所有子树中的节点;祖先节点:从树节点到该节点的路径上的节点。

l  节点的层次:根节点为第一层(以此类推);树的高度:树中节点的最大层次。

有序树:树中节点子树按次序从左向右安排,次序不能改变;无序树:与之相反

l  森林:互不相交的树的集合。

3.树的性值

l  树的节点树为所有节点度数加1(加根节点)。

l  度为m的树中第i层最多有m^(i-1)个节点。

l  高度为h的m次树至多(m^h-1)/(m-1)个节点。

l  具有n个节点的m次树的最小高度为logm( n(m-1) + 1 )  向上取整。

4. 二叉树简介

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

如图

249e9a3fa6594bc7936b9d0991e63c54.png

如图,每一个结点中最多拥有一个左结点和一个右结点,并没有多余的结点,这是很明显的二叉树的特征

5. 二叉树的特点

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

1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。

2)左子树和右子树是有顺序的,次序不能任意颠倒。

3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

6. 二叉树的性质

二叉树具有以下几种特征

性质1:二叉树第i层上的结点数目最多为 2的(i-1)次方个节点(i≥1)。

性质2:深度为k的二叉树至多有2的k次方-1个结点(k≥1)。

性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。

性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。

7. 几种特殊的二叉树

l 斜树

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

bb51ffdd55054faab8aa950dd5d639cc.png

如图为一颗左斜树

l 满二叉树

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

满二叉树的特点有:

1)叶子只能出现在最下一层。出现在其它层就不可能达成平衡。

2)非叶子结点的度一定是2。

3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。

af8e448ba4e14c15b9175dabcfbb6f50.png

如图为一颗满二叉树

l 完全二叉树

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

8b412b69dbd74a00b504eacda16cf9dc.png

如图为一颗完全二叉树

 

 

 


http://www.mrgr.cn/news/27299.html

相关文章:

  • Numpy 数组拼接与拆分函数详解
  • 检查一个复数C的实部a和虚部b是否都是有限数值即a和b都不是无限数值、空值cmath.isfinite(x)
  • 51单片机-DS18B20(温度传感器)AT24C02(存储芯片) IIC通信-实验2-温度实时监测(可设置阈值)
  • GitLab CI_CD 从入门到实战笔记
  • 面试爱考 | 设计模式
  • 【编程基础知识】Java语言中字面字符和转义字符的区别
  • 图神经运算符 (GNO)能不能用于炒股?
  • 【spring】spring框架中使用的设计模式有哪些,经典的设计模式应用,spring框架中哪些地方使用了哪些优秀的设计模式
  • 【IP协议】解决 IP 地址不够用的问题(IP地址管理:动态分配、NAT、Ipv6)
  • 如何看待IBM中国研发部裁员?
  • 门店引流神器异形创意LED圆形(饼/盘)显示屏使商业广告更有吸引力
  • 【Python电商项目汇报总结】**采集10万+淘宝商品详情数据注意事项总结汇报**
  • Unity的Button组件进行扩展
  • UCRT深度剖析:打造Windows平台C语言开发的标准化与高效运行时环境
  • 架构师的七大核心能力
  • MySql的基础讲解
  • 链接器和装载器--符号管理
  • 第二十五章 添加数字签名
  • [Python学习日记-21] Python 中的字符编码(上)
  • JAVA:Nginx(轻量级的Web服务器、反向代理服务器)--(1)