树与二叉树基本概念、结构特点及性质

目录

1树的概念及结构

1.1 树的特点

 1.2树的相关概念

 1.3树的表示

2二叉树

2.1概念

 2.3特殊的二叉树

 2.4二叉树的性质 


1树的概念及结构

树是一种 非线性 的数据结构,它是由 n n>=0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因
为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的
 
有一个 特殊的结点,称为根结点 ,根节点没有前驱结点
除根节点外, 其余结点被分成 M(M>0) 个互不相交的集合 T1 T2 …… Tm ,其中每一个集合 Ti(1<= i
<= m) 又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有 0 个或多个后继
因此,树是递归定义 的。

1.1 树的特点

1.每个结点有零个或多个子结点;
2.没有父结点的结点为根结点;
3.每一个非根结点只有一个父结点;
4.每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的父结点的一个子树;

 1.2树的相关概念

1.根结点:没有双亲节点的结点

2.孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点

3.双亲结点:若一个节点含有子节点,则这个节点称为其子节点的父节点

4.节点的度:一个节点含有的子树的个数称为该节点的度

5.叶结点:度为0的结点称为叶结点,也可以叫做终端结点

6.分支结点:度不为0的结点称为分支结点,也可以叫做非终端结点

7.结点的层次:从根结点开始,根结点的层次为1,根的直接后继层次为2,以此类推

8.结点的层序编号:将树中的结点,按照从上层到下层,同层从左到右的次序排成一个线性序列,把他们编成连续的自然数

9.树的度:树中所有结点的度的最大值

10.树的高度(深度):树中结点的最大层次

11.森林:m(m>=0)个互不相交的树的集合,将一颗非空树的根结点删去,树就变成一个森林;给森林增加一个统一的根结点,森林就变成一棵树

12.兄弟结点:同一双亲结点的孩子结点间互称兄弟结点。

 1.3树的表示

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了, 既然保存值域,也要保存结点和结点之间 的关系 ,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法

 image-20210902135556658

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

无论树中一个结点有多少个孩子,都可以表示。因为我只指向第一个孩子,剩下的孩子,让孩子之间用兄弟指针串起来

树与二叉树基本概念、结构特点及性质_第1张图片

 

2双亲表示法:

树与二叉树基本概念、结构特点及性质_第2张图片

2二叉树

2.1概念

一种特殊的树,见名知意,只有两个分叉的树。特点是二叉树的度最大只能为2,也就是说每个结点的子节点最多只能有两个。

 树与二叉树基本概念、结构特点及性质_第3张图片

 2.3特殊的二叉树

1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是2^k-1(等比数列求和),则它就是满二叉树。

 树与二叉树基本概念、结构特点及性质_第4张图片

image-20210903174116425

2. 完全二叉树 :完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为 K的,有n 个结点的二叉树,当且仅当其每一个结点都与深度为 K 的满二叉树中编号从 1 n 的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
概念:对于层数(n>=2)的树,其n-1层符合满二叉树,第n层结点必须满足从左向右都连续。
image-20210903174022344

树与二叉树基本概念、结构特点及性质_第5张图片 

 

1.若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
2.如果有度为 1 的结点,那只可能有一个,且该节点只有左孩子,而无右孩子 

3.完全二叉树中度为1的结点最多只有一个

 2.4二叉树的性质 

性质1:若规定根结点的层数是1,二叉树第i层上的结点数目最多为 2^{i-1} (i≥1)

 证明:下面用"数学归纳法"进行证明。
(01) 当i=1时,第i层的节点数目为2{i-1}=2{0}=1。因为第1层上只有一个根结点,所以命题成立。
(02) 假设当i>1,第i层的节点数目为2^{i-1}。这个是根据(01)推断出来的!
下面根据这个假设,推断出"第(i+1)层的节点数目为2{i}“即可。
由于二叉树的每个结点至多有两个孩子,故"第(i+1)层上的结点数目” 最多是 “第i层的结点数目的2倍”。 即,第(i+1)层上的结点数目最大值=2×2^{i-1}=2{i}。

性质2:若规定根结点的层数是1,深度为k的二叉树至多有2^{k}-1个结点(k≥1)

证明:在具有相同深度的二叉树中,当每一层都含有最大结点数时,其树中结点数最多。利用"性质1"可知, 深度为k的二叉树的结点数至多为:
20+21+…+2k-1=2k-1

性质3:包含n个结点的二叉树的深度至少为log2 (n+1)

证明:根据"性质2"可知,高度为h的二叉树最多有2^h–1个结点。反之,对于包含n个节点的二叉树的高度至少为log2(n+1)。

性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

证明:因为二叉树中所有结点的度数均不大于2,所以结点总数(记为n)=“0度结点数(n0)” + “1度结点数(n1)” + “2度结点数(n2)”。由此,得到等式一。
(等式一) n=n0+n1+n2
  另一方面,0度结点没有孩子,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是:n1+2n2。此外,只有根不是任何结点的孩子。故二叉树中的结点总数又可表示为等式二。
(等式二) n=n1+2n2+1
由(等式一)和(等式二)计算得到:n0=n2+1。

性质5:树的边的个数比节点数少一个,节点个数于节点边的关系: N个节点的树有N-1个边.

边与度的关系:N - 1 = 0N0+1N1 + 2 * N2+3N3+……+KNK

你可能感兴趣的:(数据结构初阶,数据结构,c语言,c++)