数据结构-树

目录

一. 数据结构

二. 术语

2.1. 结点

2.2. 子树

2.3. 度

2.4. 层次(深度/高度)

2.5. 有序树和无序树

2.6. 森林

2.7. 空树

三. 树的其他表示方法

四. 结点和节点

五. 总结


一. 数据结构

1. 线性存储结构:常见的线性结构有数组、链表、队列、栈、顺序表、广义表等。线性结构又分为顺序存储(如数组)和链式存储(如链表)。

    特点:除第一个元素只有一个“后继”和最后一个元素只有一个“前驱”,其它每个元素只有一个“前驱”元素和一个“后继”元素。

    注意:队列和栈本身不是一种数据结构,可通过数组或链表实现。

2. 非线性存储结构:常见的非线性结构有二维数组、树和图。

    特点:每个元素可以和多个元素“连接”。

二. 术语

 图1:树的存储结构

图1L:图1左半部分;图1R:图1右半部分

图1L的这些元素具有的就是 "一对多" 的逻辑关系,例如元素 A 同时和 B、C、D 有关系,元素 D 同时和 A、H、I、J 有关系等。 观察这些元素之间的逻辑关系会发现,它们整体上很像一棵倒着的树(将图1R 倒过来),这也是将存储它们的结构起名为“树”(或者 "树形")的原因。

存储具有 "一对多" 逻辑关系的数据,数据结构推荐使用树存储结构。

2.1. 结点

和链表类似,树存储结构中也将存储的各个元素称为 "结点"。例如在图1L中,元素 A 就是一个结点。

对于树中某些特殊位置的结点,还可以进行更细致的划分,比如:

  • 父结点(双亲结点)、孩子结点和兄弟结点:以图1L 中的结点 A、B、C、D 为例,A 是 B、C、D 结点的父结点(也称为“双亲结点”),而 B、C、D 都是 A 结点的孩子结点(也称“子结点”)。对于 B、C、D 来说,它们都有相同的父结点,所以它们互为兄弟结点;
  • 树根结点(简称 "根结点" ):特指树中没有双亲(父亲)的结点,一棵树有且仅有一个根结点。例如图1L中,结点 A 就是整棵树的根结点;
  • 叶子结点(简称 "叶结点" ):特指树中没有孩子的结点,一棵树可以有多个叶子结点。例如图1L中,结点 K、L、F、G、M、I、J 都是叶子结点。

2.2. 子树

仍以图1L 的树为例,A 是整棵树的根结点。但如果单看结点 B、E、F、K、L 组成的部分来说,它们也组成了一棵树,结点 B 是这棵树的根结点。通常,我们将一棵树中几个结点构成的“小树”称为这棵树的“子树”。

知道了子树的概念后,树也可以这样定义:树是由根结点和若干棵子树构成的。例如,图1L这棵树就是由结点 A 和分别以 B、C、D 为根节点的子树构成。

注意:单个结点也可以看作是一棵树,该结点即为根结点。例如图1L中,结点 K、L、F 各自就可以看作是一棵树,只不过树中只有一个根节点而已。

2.3. 度

一个结点拥有子树的个数,就称为该结点的度(Degree)。例如图1L中,根结点 A 有 3 个子树,它们的根节点分别是B、C、D,因此结点 A 的度为 3。

比较一棵树中所有结点的度,最大的度即为整棵树的度。比如图1L中,所有结点中最大的度为 3,所以整棵树的度就是 3。

2.4. 层次(深度/高度)

从一棵树的树根开始,树根所在层为第一层,根的孩子结点所在的层为第二层,依次类推。

对于图1L这棵树来说,A 结点在第一层,B、C、D 为第二层,E、F、G、H、I、J 在第三层,K、L、M 在第四层。

树中结点层次的最大值,称为这棵树的深度或高度。例如图1L这棵树的深度为 4。

如果两个结点的父结点不同,但它们父结点的层次相同,那么这两个结点互为堂兄弟。例如图1L 中,结点 G 和 E、F、H、I、J 的父结点都在第二层,所以它们互为堂兄弟。

2.5. 有序树和无序树

如果一棵树中,各个结点左子树和右子树的位置不能交换,那么这棵树就称为有序树。反之,如果树中结点的左、右子树可以互换,那么这棵树就是一棵无序树。

在有序树中,结点最左边的子树称为 "第一个孩子",最右边的称为 "最后一个孩子"。拿图1L这棵树来说,如果它是一棵有序树,那么以结点 B 为根结点的子树为整棵树的第一个孩子,以结点 D 为根结点的子树为整棵树的最后一个孩子。

2.6. 森林

由 m(m >= 0)个互不相交的树组成的集合就称为森林。比如图1L中除去 A 结点,那么分别以 B、C、D 为根结点的三棵子树就可以称为森林。

前面讲到,树可以理解为是由根结点和若干子树构成的,而这若干子树本身就是一个森林,因此树还可以理解为是由根结点和森林组成的。

2.7. 空树

简单了解即可。空树指的是没有任何结点的树,连根结点都没有。

三. 树的其他表示方法

除了图1L这样画一棵树之外,还有其它的方式可以表示一棵树。

 图2

图2 左侧是以嵌套集合的形式表示的(集合之间绝不能相交,即任意两个圆圈不能有交集)。

图2 右侧使用的是凹入表示法,最长条为根结点,相同长度的表示在同一层次。例如 B、C、D 长度相同,都为 A 的子结点,E 和 F 长度相同,为 B 的子结点,K 和 L 长度相同,为 E 的子结点,依此类推。

还可以用广义表表示一棵树。例如图1L用广义表表示为:

(A , ( B ( E ( K , L ) , F ) , C ( G ) , D ( H ( M ) , I , J ) ) )

四. 结点和节点

节点和结点的区别有概念来源不同、所表示的物理意义不同、应用场景不同、代表的数据结构不同。

节点是一个实体,它具有处理的能力。例如,网络上的一台计算机就是一个节点,它可以接收、发送、处理数据。节点也可以指一些具有特定功能的设备或模块,例如,路由器、交换机、传感器等。

结点是一个交叉点、一个标记,算法中的点一般都称为结点。例如,数据结构中的链表、树、图等都是由结点组成的。结点通常用来表示数据元素或者算法中的状态。

1. 概念来源不同。节点一词来源于数学与物理,表示在空间中一定位置的点。结点一词来源于计算机科学,表示数据结构中存储或处理数据的点。所以,节点属于数学概念,结点属于计算机概念。

2. 所表示的物理意义不同。节点通常表示结构、空间或过程中的一定位置或点,没有数据存储的概念。而结点是用于存储或处理数据的位置,结点之间通过指针或链表相连,具有数据存储和组织功能。

3. 应用场景不同。节点一词广泛应用于各个领域表示位置或点的概念,如生物医学、工程技术等。而结点一词主要应用于计算机算法和数据结构,如链表、树、图等。结点概念专属于计算机技术领域。

4. 代表的数据结构不同。节点没有特定的数据结构,只作为某种结构的点或位置,数据存储量可大可小。而结点由若干存储单元组成,代表了链表、树、图等数据结构,具有固定的数据组织形式。

五. 总结

树是一种非线性存储结构,通常用来存储逻辑关系为 "一对多" 的数据。

使用树结构存储的各个结点,它们之间的关系类似于家谱中的成员关系,比如有父子关系、兄弟关系、表兄弟关系等。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流华追梦

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值