第五章——树和二叉树

一.树的基本概念

1.树的定义

【定义】树(Tree)是n(n≥0)个结点的有限集,它或为空树(n=0);或为非空树,
对于非空树T:
①有且仅有一个称之为根的结点;
②除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1, T2, …, Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。

树的结构定义是一个递归的定义,在树的定义中又用到树的定义,它道出了树的固有特性。
【树的表示形式】
①嵌套集合
②广义表
③凹入法(类似于书的编目)

2.树的基本术语

【结点】树中的一个独立单元。
【结点的度】结点拥有的子树数称为结点的度。
【树的度】树的度是树内各结点度的最大值。
【叶子】度为0的结点称为叶子或终端结点。
【非终端结点】度不为0的结点称为非终端结点或分支结点。除根结点之外,非终端结点也称为内部结点。
【双亲和孩子】结点的子树的根称为该结点的孩子,相应地,该结点称为孩子的双亲。
【兄弟】同一个双亲的孩子之间互称兄弟
【祖先】从根到该结点所经分支上的所有结点。
【子孙】以某结点为根的子树中的任一结点都称为该结点的子孙。
【层次】:结点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一结点的层次等于其双亲结点的层次加1。
【堂兄弟】双亲在同一层的结点互为堂兄弟。
【树的深度】树中结点的最大层次称为树的深度或高度。
【有序树和无序树】如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
【森林】森林:是m(m≥0)棵互不相交的树的集合。

二.二叉树

1.二叉树的定义:

【定义】二叉树(Binary Tree)是n(n≥0)个结点所构成的集合,它或为空树(n=0);或为非空树,对于非空数。

2.二叉树的特点:

①每个结点最多有俩孩子(二叉树中不存在度大于2的结点)
②子树有左右之分,次序不能颠倒
③二叉树可以是空集合,根可以有空的左子树和右子树。

3.二叉树的性质:

①性质1 在二叉树的第i层上至多有2^i−1个结点(i≥1)。
②性质2 深度为k的二叉树至多有2^k−1个结点(k≥1),最少有K个结点。
③性质3 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

4.两种特殊形式的二叉树:

研究原因:它们在顺序存储的方式下可以还原。
满二叉树一定是完全二叉树
完全二叉树不一定是满二叉树
第五章——树和二叉树_第1张图片

4.1满二叉树

【定义】深度为k且含有2^k−1个结点的二叉树。
【特点】
①每一层的结点数都是最大结点数(即每层都满)
②叶子结点全部都在最底层
【编号方法】从上至下,从左至右依次编号
【注意】满二叉树在同样深度的二叉树中结点个数和叶子结点个数最多。

4.2完全二叉树

【定义】深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。图5.6(b)所示为一棵深度为4的完全二叉树。

在满二叉树中,从最后一个结点开始,连续去掉任意一个结点,即为一颗完全二叉树。
【注意】一定是从最后连续的去掉!!
【特点】
①叶子只可能分布在层次最大的两层上。
②对任一结点,若其右分支下的子孙的最大层次为i,则其左分支下的子孙的最大层次必为l或i+1 。

**完全二叉树的性质:

性质4表明了完全二叉树结点数n与完全二叉树深度k之间的关。
第五章——树和二叉树_第2张图片
性质⑤表明了完全二叉树中双亲结点编号与孩子结点编号之间的关系

三.二叉树的存储结构

3.1顺序存储结构

1.二叉树顺序存储实现:

按照满二叉树的结点层次编号,依次存放二叉树的数据元素。

附:完全二叉树编号为i的结点存储在数组下表为i-1的分量中。

通过顺序表画出二叉树
通过二叉树画出顺序表

#define MAXSIZE 100
typedef TElemType SqBiTree [MAXSIZE];  //0号单元存储根节点
SqBiTree bt;
2.二叉树顺序存储的缺点:

.在最坏情况下,深度为K的且只有k个结点的单枝树需要长度为2^k-1的一维数组,浪费存储空间

3.二叉树顺序存储的特点:

①结点关系蕴含在其存储位置之中
②浪费空间,适合存储满二叉树和完全二叉树

3.2链式存储结构

1.二叉树链式存储实现

由于顺序存储空间利用率低,一般会采用链式存储结构

typedef struct BiNode{
	TElemType data; //结点的数据域
	struct BiNode *child,*rchild;//左右孩子指针
}BiNode,*BiTree;

在n个结点的二叉链表中,有n+1个空指针域

你可能感兴趣的:(数据结构,二叉树,数据结构)