文章目录
- 前言
- 一、树是什么?
- 二、树的特点
- 三、树的相关概念
- 四、树的表示方法(孩子兄弟表示法)
- 总结
前言
在学习完线性结构,例如顺序表、链表、栈、队列后,我们要开始学习一个新的数据结构----树
一、树是什么?
首先树是一个非线性的数据结构,由有限个节点组成的一个具有层次的集合。
如图,下面是树的逻辑结构,因为逻辑结构像一颗倒挂的树,也就是根在上,树枝朝下。
顾名思义被称为“树”。
二、树的特点
我们来看上面的图
- 根节点:没有前驱结点的节点,如图中的A。
- 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti
(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继 - 树是递归定义的。
- 树又被称作树形结构,是一对多的,也就是一个节点对应多个节点。
三、树的相关概念
- N个节点的树有N-1条边
- 节点的度: 一个节点含有的子树的个数称为该节点的度 ;如图:A的度为3
- 树的度: 一棵树中,最大的节点的度称为树的度;如上图:树的度为3
- 叶节点或终端节点: 度为0的节点称为叶节点; 如上图:J、K、L、M、G等节点
- 叶节点分枝节点: 度不为0的节点,有孩子节点的节点
- 父节点: 有子树的节点,有子节点的节点子节点:有父节点的节点
- 兄弟节点: 具有相同父节点的节点
- 堂兄弟节点: 双亲在同一层的节点
- 节点的层次: 根节点是第一层,以此类推
- 树的高度或深度: 树中节点的最大层次,也是叶节点的层次
- 节点的祖先: 从根节点到该节点的所有节点都是这个节点的祖先,也就是从根节点往下找这个节点经过 的节点,当然也包括根节点。
- 子孙: 以某个节点为根节点的子树中的任意一个节点都是该节点的子孙
- 森林: 互不相交的多棵树叫森林
四、树的表示方法(孩子兄弟表示法)
我们想用代码来写出一个完整的树,需要考虑的因素太多了,方法也很多,在这里我们讲一个树的最优方法供大家学习。
我们知道树是一对多的结构,所以这也同样会用到指针,但是指针应该有几个,都指向谁?这就又是一个问题了。不要慌张,先来看这颗树的逻辑结构。
我们看到首先A这个根节点 链接着分别以B、C、D三个为根节点的子树,那我们是否就要在A这个节点上加三个指针呢?那是不是如果A链接4个就要加四个指针?很明显不可能这么做,这个时候就有一位大神发明了一种方法(孩子兄弟表示法)
这个方法总结成一句话就是,“父母看老大,老大看老二,老二看老三”。
如图:
总结
以上就是我们今天讲述的 树的结构,下节课让我们继续学习新的知识-----二叉树