数据结构13————树的基本概念和存储

数据结构13————树的基本概念和存储

文章目录

  • 数据结构13————树的基本概念和存储
      • 一.内容
      • 二.树的定义
        • 1.形式化定义:
        • 2.需要注意的一些问题
        • 3.举例
      • 三.树的相关术语
        • 1.节点相关
        • 2.节点间关系
        • 3.其他相关概念
      • 四.树的ADT
      • 五.树的存储
        • 1.双亲表示法
        • 2.孩子表示法
        • 3.孩子兄弟法
      • 六参考资料

一.内容

  1. 树的定义
  2. 树的相关术语
  3. 树的ADT
  4. 树的存储

二.树的定义

1.形式化定义:

树(tree)是包含n(n>0)个结点的有穷集,其中:
(1)每个元素称为结点(node);
(2)有一个特定的结点被称为根结点或树根(root)。
(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。

2.需要注意的一些问题

a. n>0时,根节点唯一,不可能存在多个根节点
b. m>0时,子树的个数没有限制,但是它们一定不能相交

3.举例

数据结构13————树的基本概念和存储_第1张图片

  • 如图所示,是T是一个典型的树,节点A是树的根节点
  • 其余元素集合(BCDEF)被分为两个集合,T1(BDEF)和T2(CG),T1和T2本身也是一棵树,也满足树的定义

数据结构13————树的基本概念和存储_第2张图片

  • 如图所示,此时m分出两个子树相交,所以这一个图不是树。

三.树的相关术语

1.节点相关

  • 节点的度:节点拥有子树的个数
  • 叶子节点/终端节点: 度为0的节点。(子树个数为0)
  • 分支节点/非终端节点:度不为0的节点。
  • 树的度:树内个节点的度的最大值
    数据结构13————树的基本概念和存储_第3张图片
    在树T中: A根节点,ABC为分支节点,DEFG为叶子节点,树T中节点D度最大为3,所以树T的度为3

2.节点间关系

  • 节点的孩子与双亲:节点子树的根称为该节点的孩子,相应的该节点称为孩子的双亲
  • 节点的兄弟: 同一双亲的孩子互称为兄弟
  • 节点的祖先: 从根的到该节点的所经分支的所以节点
  • 节点的子孙:所以该节点为根的子树的所有节点,都是该节点子孙

数据结构13————树的基本概念和存储_第4张图片
在树T中 ;B是DEF的双亲节点,DEF是B的孩子节点,DEF互为兄弟节点,BA是D的祖先,BCDEFG都是A的子孙

3.其他相关概念

  • 节点的层次:从根节点开始定义,根节点为第一层,根的孩子为第二层,根的孩子的孩子为第三层,以此类推
  • 节点的堂兄弟: 双亲在同一层次的节点互称为堂兄弟
  • 树的深度:节点的最大层次
  • 无序树和有序树:子树从左到右有大小关系不可以互换,称为有序树,反之称为无序树
  • 森林:m(m>=0)不相交树的集合

数据结构13————树的基本概念和存储_第5张图片
在树T中: A是第一层,BC是第二层,DEFG是第三层,FG互为堂兄弟,树的深度为3

四.树的ADT

ADT 树(tree)
Data
树是由一个根节点和若干子树构成.树的节点拥有相同的数据类型及层次结构
Operation
①InitTree(Tree);
②DestoryTree(Tree);
③CreatTree(Tree);
④TreeEmpty(Tree);
⑤Root(Tree);
⑥Parent(Tree,x);
⑦FirstChild(Tree,x);
⑧NextSibling(Tree,x);
⑨InsertChild(Tree,p,Child);
⑩DeleteChild(Tree,p,Child);
endADT

五.树的存储

主要介绍: 双亲表示法,孩子表示法,孩子兄弟表示法

1.双亲表示法

a.存储形式
使用连续存储空间(数组),将每个节点存储进去,并且对于每个节点,将他们的双亲节点的信息存储进去。
b.举例
-1表示不存在
数据结构13————树的基本概念和存储_第6张图片
c.扩充
对于上面的结构而言,还可以添加更多的附加信息,比如说添加第一个孩子的信息,或者添加有兄弟的信息
数据结构13————树的基本概念和存储_第7张图片

2.孩子表示法

存储形式
将一个节点和它所有孩子的节点使用指针链接起来

举例
方案a:
树的度为树节点的最大值,所以设置节点指针域的个数为树的度
数据结构13————树的基本概念和存储_第8张图片

数据结构13————树的基本概念和存储_第9张图片
方案b
方案a中并不是每个节点都达到了树的度,造成了很大浪费,对方案a进行改进,增加一个表示孩子个数的变量

数据结构13————树的基本概念和存储_第10张图片

数据结构13————树的基本概念和存储_第11张图片
方案C:
方案b依然有些不足,由于每个节点的链表是不同的结构,加之要维护表示节点的度的数组,也增加时间的消耗。我们使用数组链表结合的方法来表示他的孩子

数据结构13————树的基本概念和存储_第12张图片

数据结构13————树的基本概念和存储_第13张图片

3.孩子兄弟法

a.存储形式
对于任意一个节点,第一个节点存储它的第一个孩子,第二个节点存它的右兄弟

b.举例
数据结构13————树的基本概念和存储_第14张图片

数据结构13————树的基本概念和存储_第15张图片
孩子兄弟法最大的好处是将树转换为二叉树,关于二叉树可以看我的下一篇博客

六参考资料

<大话数据结构>,<数据结构与算法>

你可能感兴趣的:(数据结构与算法,数据结构与算法)