【数据结构】树的基本认识

文章目录

前言

一、树的定义及基本术语

1.树的定义

2.基本术语

3.树的性质

二、树的表示(存储结构)

 


前言

树形结构是一类重要的非线性结构。树形结构是结点之间有分支,并且具有层次关系的结构,类似于大自然中的树。


一、树的定义及基本术语

1.树的定义

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因
为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

①每个结点有零个或多个子结点;(每个结点有零个或多个后继)

②没有父结点的结点称为根结点;(树中有且只有一个结点,没有前驱,该节点为根结点

③每一个非根结点有且只有一个父结点;(除根结点外,其余结点有且只有一个直接前驱)

④除了根结点外,每个子结点可以分为多个不相交的子树 。

2.基本术语

结点的度:一个结点中包含的子树的个数称为结点的度,例如:A的度为2,B的度为3,H的度为0

树的度:一棵树中,最大的结点的度,称为树的度,例如:上图树的度为3

结点的层次:从根开始定义,根为第一层,根的子节点为第二层,依次类推

树的深度或高度:树中结点的最大层次,例如:上图树的高度为4

叶结点或终端结点:度为0的结点称为叶结点。(当一棵树中只有一个结点,这个结点既是根结点也是叶结点)例如:上图的D、F、G、H、I

非终端结点或分支节点:度不为0的结点。例如:B、C、E等

双亲结点或父结点:若一个结点包含子结点,则这个结点称为其子结点的父节点。例如:A是B、C的父节点

孩子结点或子结点:结点的子树的根称为该结点的孩子。例如:B、C是A的孩子

兄弟结点:具有相同父节点的结点互称为兄弟结点:例如B、C是兄弟结点

堂兄弟结点:双亲在同一层的结点互称为堂兄弟结点。例如F、G为堂兄弟结点

结点的祖先:从根到该结点所经分支上的所有结点。例如:A是所有结点的祖先

子孙:以某个结点为根的子树中任一结点称为该结点的子孙。例如:所有结点都是A的子孙

森林:由m(m>=0)棵互不相交的树的集合称为森林。

3.树的性质

1.树中的结点数等于所有结点的度数加1。

  • 证明:不难想象,除根结点以外,每个结点有且仅有一个指向它的前驱结点。也就是说每个结点和指向它的分支一一对应。 假设树中一共有b个分支,那么除了根结点,整个树就包含有b个结点,所以整个树的结点数就是这b个结点加上根结点,设为n,则n=b+1。而分支数b也就是所有结点的度数,证毕。

2.度为m的树中第i层上至多有m^(i−1)个结点(i≥1)。

  • 证明:(数学归纳法) 首先考虑i=1的情况:第一层只有根结点,即一个结点,i=1带入式子满足。 假设第i-1层满足这个性质,第i-1层最多有m i-2个结点。 ……… .......... i-1层 ……… 又因为树的度为m,所以对于第i-1层的每个结点,最多 有m个孩子结点。所以第i层的结点数最多是i-1层的m 倍,所以第i层上最多有m ^(i-1)个结点。

3.高度为h的m叉树至多有(m^h-1)/(m-1)个结点

4.具有n个结点的m叉树的最小高度为logm(n(m-1)+1)

二、树的表示(存储结构)

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,实际中树有很多种表示方式,如:双亲表示法,孩子表示法、孩子兄弟表示法等等。

1.顺序存储结构

  • 双亲表示法:用一组连续的存储空间存储树的结点,同时在每个结点中,用一个变量存储该结点的双亲结点在数组中的位置。

2.链式存储结构

  • 孩子表示法:把每个结点的孩子结点排列起来存储成一个单链表。所以n个结点就有n个链表; 如果是叶子结点,那这个结点的孩子单链表就是空的; 然后n个单链表的的头指针又存储在一个顺序表(数组)中。

  • 孩子兄弟表示法:顾名思义就是要存储孩子和孩子结点的兄弟,具体来说,就是设置两个指针,分别指向该结点的第一个孩子结点和这个孩子结点的右兄弟结点。

孩子表示法:

孩子兄弟表示法演示:

代码如下:

typedef int DataType;
//结点定义
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值