【算法与数据结构】:有关树的理论基础

95 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

1、写在前面

大家好,我是翼同学。今天文章的内容是:

  • 树的理论基础

2、内容

2.1、树的概念

树(Tree),将nn个结构构成的有限集合T称为树。

之前记录的顺序表、链表、栈和队列等,都是反映了数据元素之间的线性关系,都是线性结构。而今天记录的树,则是一种重要的非线性结构。

树是一种可以描述数据元素之间的层次关系的数据结构,这种层次关系的特点体现在,任意一个树结点的直接前驱如果存在,则一定是唯一的。直接后继如果存在,则可以有多个(即一对多)。

树结构在日常生活中也很常见,比如书籍的目录、组织机构图、计算机中文件的存储组织方式等。

2.2、相关术语记录

树结构的示意图如下:

image.png

在上述示意图中,树的根在上,并向下生长。

(1) 结点

结点包含了数据项以及指向其他结点的分支。

并且,每棵树都有一个特定的结点称为根结点(root)。比如上述示意图中,A结点就是根结点。

除根结点之外,每个结点都有且只有一个前驱结点,但可以有多个后继结点,这也体现了树的一对多关系。

(2) 子树

image.png

在上述示意图中:

  • 根结点A下的其余结点,可以分为三个互不相交的集合T1T_1T2T_2T3T_3

其中:

  • T1T_1={BB, EE, FF}
  • T2T_2={CC, GG, HH, II, KK, LL}
  • T3T_3={DD, JJ}

并且,T1T_1T2T_2T3T_3就是根结点A的三个子树(他们本身也是一颗树),以此类推。

(3) 结点的度

我们将及结点拥有的子树的数目称为结点的度。

image.png

比如在上述示意图中:

  • 结点A的度为3
  • 结点B的度为2
  • 结点C的度为2
  • 结点D的度为2
  • 结点E的度为0

(4) 叶结点

叶结点是度为0的结点,有时也称为终端结点。需要注意到,叶结点是没有后继的。

image.png

在上述示意图中,结点EFGHIJ都是叶结点。

(5) 分支结点

我们将度不等于0的结点称为分支结点,有时也称为非终端结点。

image.png

比如结点AABBCCDD就是分支结点。也就是说,除叶结点之外,其他结点都是分支结点。

(6) 子结点

一个结点的直接后继称为该结点的子结点。

image.png

上述示意图中的结点BBCCDD就是结点AA的子结点.

(7) 父结点

一个结点的直接前驱称为该结点的父结点,也称为双亲结点。

image.png

上述示意图中,结点AA是结点BBCCDD的父结点.

(8) 结点层次

我们可以规定,根结点的的层次为1,那么其余结点的层次就等于其父结点的层次加一。

image.png

上述示意图中,结点AA的层次为1,结点BBCCDD的层次都是2.

(9) 树的高度

我们将树中结点的最大层次称为树的高度,有时也称为树的深度。

image.png

上述示意图中,树的高度为3.

(10) 有序树

如果一棵树中各结点的子树从左到右是有次序的,不能交换,此时这棵树就称为有序树。

(11) 无序树

如果一棵树中各结点的子树的次序是可以随意交换,不在意次序的,此时这棵树就称为无序树。

(12) 森林

由若干棵互不相交的树组成的集合,称为森林。

事实上,只要删除一颗树的根结点就会得到森林。同样的,通过给森林添加一个根结点,就能将森林转化为一棵树。

3、写在最后

好了,文章的内容就到这里,感谢观看。