树的基本概念(含图论中的严格定义)

目录

1.树形结构

2.树的定义

3.树的结点

4.森林


1.树形结构

之前的内容介绍的都是线性结构,从今天开始,我们要介绍另外一种数据结构类型——树形(层次)结构,它是一种非线性的存储结构。

那他们之间有什么区别呢?

线性结构:(一对一)一个数据元素若有直接前驱,只能有一个直接前驱

层次结构:(一对多)一个数据元素若有直接后继,可以有多个直接后继

2.树的定义

关于树的定义,我们在数据结构中其实只需要形象的理解就可以了,它的严格数学定义要追究到图论中,对于学习数据结构,了解了解就行了。

形象理解

看看图就可以理解了。

我们将⼀对多的关系的集合中的数据元素按照图中的形式进行存储,整个存储形状在逻辑结果上面看,类似于实际⽣活中倒着的树,所以就将这种结构称之为树形结构。

 数据结构中的定义

具有相同特性的n个结点(数据元素)的有限集合

  •  若n=0,则称为空树 。否则:
  •  存在唯一的称为的结点root;
  •  当n>1时,其余结点可分为m (m>0)个互不相交的有限集T1 , T2 , …, Tm,其中每一个子集本身又是一棵符合本定义的树,称为根root的子树。
  • m棵子树的根结点为根root的直接后继

可以看出:这是一种递归的定义方式

图论中的定义

在图论中,我们往往是先学习图,再学习图的一个特例——树,所以,树是根据图来定义的。

那图是什么呢?

一个图是一个有序对(序偶)<V,E>,记为G=<V,E>

点集V:是一个有限的非空集合(存放着这个图中的所有结点)

边集E:是一个有限集合(存放着由V中的不同结点所构成的无序对,且不含重复元素)

那有序对又是什么呢?

恰好有两个元xy,而且x在前,y在后,这种集合称为有序对,它的元有确定的次序,记作<xy>

所以,我认为,一个图就是点集与边集组成的一个关系集合。

那树又是图的一个特例,就是:

树是无圈的连通图。(是不是相当简洁明了,无圈和连通就是我们直观上理解的那个意思:没有环,但从任意一个结点出发,一定可以达到任意的另外一个结点)

它与以下5个定义是等价的,在数学中,我们通常采用循环证明的方式得到:

设T是非平凡图(n,m)

  • T无圈且m=n-1
  • T连通且m=n-1
  • T无圈,但在T中任意两结点之间增加一条新边后有且仅有一个圈
  • T连通,但删除T中的任意一条边后,便不连通(n\geqslant2)
  • T中每一对结点之间有且仅有一条道路(n\geqslant2) 

3.树的结点

结点:使用树形结构存储的每一个数据元素都被称为结点,上图中的A、B、C等都是结点

根结点:它是一个特殊的结点,它没有前驱,上图中的A就是根节点

父节点(双亲结点)、子结点、兄弟结点:对于A、B、C、D四个结点来说,A是BCD的父节点,也称双亲结点,BCD是A的子结点,也称孩子结点,BCD之间互称兄弟结点

叶子结点:如果一个结点没有任何子结点,那么它就是叶子结点。比如E、C、G、H、I、J都是叶子结点

结点的度:结点拥有的子树的个数。比如A、F的度为3,B的度为2,D的度为1,其他的度为0

树的度:在各个结点中,结点度的最大值就是树的度。比如,该树的度为3

树的深度(高度):结点的层次从根节点开始定义,根为第一层,根的孩子为第二层,依次类推。该树的深度为4

4.森林

m棵互不相交的树的集合(m\geqslant0)

 可见,蓝色、绿色、黄色各为一棵树,它们不互相交,共同构成了一个森林,但这个森林本身也是一棵树。

所以,对树中的每个结点而言,其子树的集合就是森林

今天先到这里,下一篇我们来看看怎么用树来存储数据以及完整代码实现。

猜你喜欢

转载自blog.csdn.net/weixin_54186646/article/details/123844255