提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、树的相关概念、性质和各种存储结构
前言
提示:这里可以添加本文要记录的大概内容:
本篇介绍树,树是什么,用来干嘛的(有空补充)
一、树的相关概念、性质
1.树的相关概念
- 树是由n个结点组成的有限集合。
- n=0时,是一个空集合,也是一棵空树。
- n>0时,有且仅有一个根节点(root),其余结点可分为m个互不相交的有限集,其中每个子集本身又是一棵符合本定义的树,称为根节点的子树。
- 树是一种非线性数据结构:每一个结点可以有零个或多个后继结点,但是有且仅有一个前驱结点(根节点除外)。数据元素之间存在的关系的一对多的关系。
1.数的逻辑表示方法:树形表示法(一棵倒置的树,⭕表示结点,内存放数据信息,连线表示关系);文氏图表示法(大圆套小圆,兄弟并列);凹入表示法(竖排列的条形图,根节点在最上面最长,依次缩进)括号表示法(例子:A(B(E,F),C(G(J)),D(H,I(K,L,M)))
2.度:一个结点的子树个个数为该结点的度。树中各节点的度的最大值称为树的度,将度为m的树称为m次树。
3.分支结点:度不为0的结点称为非终端结点,又叫分支结点。度为0的结点称为终端结点或叶子结点。在分支结点中,每个结点的分支数就是该结点的度。
4.路径:路径就是自上而下、从A到K所通过的结点的序列,路径长度是结点数-1。
5.孩子结点和双亲结点:一个结点的后继结点称孩子结点(或子女结点),相应的,该结点是孩子结点的双亲结点(或父母结点)。同理,还有兄弟结点、子孙结点、祖先结点。
6.结点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推。最大层次就是数的高度或深度。
7.有序树和无序树:从左到右,从上到下相对次序不能随意变化,称为有序树,无序树与之相对。默认为有序树。
8.森林:由几棵互不相交的树的集合称为森林。
[可以点进链接里去看IC00这位博主的详细讲解]
2.树的性质:
性质一:树中的结点树等于所有结点的度之和加一。【度之和=分支数之和】
性质二:度为m的树中第i层上最多有m的(i-1)次方个结点(i大于等于1)。
性质三:高度为h的m次数最多有 个结点
性质四:具有n个结点的m次数的最小高度为(若2次数,n=20,则最小高度为4)
3.树的运算
(1)查找某种结点;(2)插入或删除某个结点;(3)遍历每个结点(先根遍历(根>左>右)、后根遍历(叶子左>叶子右>根)、层次遍历3种)
二、树的存储结构
1.双亲存储结构
是一种顺序存储结构,用一组连续空间存储树的所有结点,同时在每个结点中附设一个伪指针只是其双亲结点位置:
PTree结点类代码如下:
class PTree<E>
{
E data; //存值
int parent; //存位置
}
PTree<E>[] t;//双亲存储结构t//实例化格式
2.孩子链式存储结构
代码如下(示例):
该处使用的url网络请求的数据。
3.孩子兄弟链式存储结构(不讲)
总结
以上就是今天要讲的内容,本文简单介绍了树的相关概念、性质和存储结构。但是树其实并不常用,我们需要通过学习树去学会应用二叉树。