数据结构PPT第6章树和二叉树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


徽 理
树的逻辑结构特点

大 学 1. 树中只有根结点没有前趋;
2. 除根外,其余结点都有且仅一个前趋;
3. 树的结点,可以有零个或多个后继;
4. 除根外的其它结点,都存在唯一条从
A
根到该结点的路径; 5. 树是一种分支结构。
B
C
D
E
FG H I J
KL
M

徽 理
树的应用

大 学
▪ 树可表示具有分支结构关系的对象
结论3知,x的右孩子应为2x+1,即2x+1=i,x=(i-1)/2。
故 i的双亲为└i/2┘ 证毕。

徽 理
6.2.3 二叉树的存储结构

大 学
❖ 顺序存储结构
所谓顺序存储结构,就是用一组连续的存储单元存储二
叉树的数据元素,结点在这个序列中的相互位置能反映出
结点之间的逻辑关系。 二叉树中结点之间的关系就是双亲
例1. 家族族谱
设某家庭有13个成员A、B、C、D、E、F、G、H、I、J
、K、L、M,他们之间的关系可如图所示的树表示。
例2. 单位行政机构的组织关系
A
B
C
D
E
FG H I J
KL
M

徽 理
树的应用

大 学
▪ 树是常用的数据组织形式
有些应用中数据元素之间并不存在分支结构关系,但是为
了便于管理和使用数据,将它们用树的形式来组织。
A
B
C
D
Ø
E
F
G H ØØØØI J
例如对于B结点而言: bt[2]的双亲为└1/2┘=1,即在bt[1]中 (为A); 其左孩子在bt[2i]=bt[4]中(为D); 其右孩子在bt[2i+1]=bt[5]中(为Ø )。

徽 理
顺序存储的优缺点

大 学
这种存储结构适合于完全二叉树,既不浪费存储空间,
树的最大层次为 l 或 l +1。

徽 理
两种特殊的二叉树
工 大
1

2
3


4
5
6
7


8 9 10 11 12 13 14 15
1
2
3
1
2
3
1
2
3
4
5
6
74
5
4
5
6
8 9 10 11 12
完全二叉树
67
非完全二叉树

徽 理
6.2.2 二叉树的性质

大 学
性质 4 :具有 n 个结点的完全二叉树的深度为 log2n +1。
例3. 计算机ow文件系统,所有的文件
是用树的形式来组织的。
C
文件夹1 文件夹2 文件1 文件2
文件夹11 文件夹11 文件11 文件12

徽 理
基本术语

大 树的结点:包含一个数据元素的
学 内容及若干指向子树的分支。
A
B
C
D
孩子结点:结点的子树的根称为
证明:设二叉树中度为1的结点数为n1,二叉树中总结点数
为:
n=n0+n1+n2
二叉树中的分支数,除根结点外,其余结点都有一个
进入分支,设B为二叉树中的分支总数, 则有:n=B+1。
由于这些分支都是由度为1和2的结点射出的,所以有:
B=n1+2 × n2 ; n=B+1=n1+2×n2+1 得到:n0=n2+1
证明:由性质1可见,深度为k的二叉树的最大结点数为
k
(第i层上的最大结点数)
i 1
= k 2 i 1 =20 + 21 + … + 2 k-1 = 2 k-1 i1

徽 理
6.2.2 二叉树的性质

大 学
性质3 对任何一棵二叉树T,如果其叶结点数为 n0,度为2
的结点数为 n2,则n0=n2+1。
点2i+1。

徽 理
6.2.2 二叉树的性质

大 证明:此性质可采用数学归纳法证明。因为1与2、3是相对应的, 学 所以只需证明2和3。
当 i=1时 ,根据结点编号方法可知,根的左、右孩子编号分
别是2和3,结论成立。 假定i-1时结论成立,即结点i-1的左右孩子
编号满足:
LCHILD(i-1)=2(i-1); RCHILD(i-1)=2(i-1)+1

徽 理
6.1 树的定义和基本术语

大 学
❖ 什么是树?树是由 n (n ≥ 0) 个结点的有限集合。如果 n
= 0,称为空树;如果 n > 0,则
▪ 有且仅有一个特定的称之为根(Root)的结点,它只有直接后继,但
没有直接前驱;
▪ 当n > 1,除根以外的其它结点划分为 m (m >0) 个互不相交的有限
}BiTNode,*BiTree;

徽 理
二叉链表



lchild data rchild
结点结构
T
A
A
B D
C E
B^ ^D
C^ ^E ^
F
^F ^

徽 理
三叉链表


lchild data parent rchild
E
该结点的孩子;如E是B的孩子。
FG H I J
双亲结点:B结点是A结点的孩子, K L
M
则A结点是B结点的双亲;如B是E的双亲。
兄弟结点:同一双亲的孩子结点;如H、I、J互为兄弟。
堂兄结点:同一层上结点;如G与E、F、H、I、J互为堂兄。
祖先结点:结点的祖先是从根到该结点所经分支上的所有结点; 如

徽 理
两种特殊的二叉树

大 学
满二叉树:深度为k的二叉树,有2k-1个结点则称为满二叉
树;
完全二叉树:如果深度为k、由n个结点的二叉树中个结点
能够与深度为k的顺序编号的满二叉树从1到n标号的结点相
对应,则称为完全二叉树。
完全二叉树的特点是:
1. 所有的叶结点都出现在第k层或k-1层。
2. 对任一结点,如果其右子树的最大层次为l ,则其左子
结点与左右孩子结点间的关系。因此,必须把二叉树的所
有结点安排成为一个恰当的序列。具体定义如下:
#define MAX-TREE-SIZE 100
TElemType SqBiTree[MAX-TREE-SIZE];

徽 理
二叉树的顺序存储结构

大 学
通常是按照二叉树结点从上至下、从左到右的顺序存储,
通过完全二叉树可知,结点 i 或者与结点i-1同层且紧靠其右,
或者结点i-1在某层最右端,而结点i在其下一层最左端。但是,无
论如何,结点i的左孩子的编号都是紧接着结点i-1的右孩子的编号,
故: LCHILD(i)=RCHILD(i-1)+1=2i;
RCHILD(i)=LCHILD(i)+1=2i+1
集 T1, T2 ,…, Tm,其中每个集合本身又是一棵树,并且称为根的子树 (SubTree)。

徽 理
树的示例
A

B
C
D


E
FG H I J
KL
M
T = { A,B,C,D,E,F,G,H,I,J,K,L,M} A是根,其余结点可以划分为3个互不相交的集合: T1= { B,E,F,K,L } T2 ={ C,G } T3 ={ D,H,I,J,M } 这些集合中的每一集合都本身又是一棵树,它们是A的子树。 对于T1,B是根,其余结点可以划分为2个互不相交的集合: T11 ={ E,K,L } T12 ={ F } T11,T12是B的子树。

大 ❖ 线性结构 学 ▪ 第一个数据元素 (无前驱);
▪ 最后一个数据元素(无后继);
▪ 其它数据元素(一个前驱、一个后继)。
❖ 树型结构
▪ 根结点(无前驱);
▪ 多个叶子结点 (无后继);
▪ 其它数据元素(一个前驱、多个后继)。

徽 理
6.2 二叉树

大 学
6.2.1 二叉树的定义
或为空树,或由根及至多两棵互不相交的左子树、右子
i …... 2i-2 2i-1
…...
2i 2i+1 …...
i与i+1同层
i与i+1不同层

徽 理
6.2.2 二叉树的性质

大 学
最后证明结论1。
当i=1时,显然根结点无双亲;当i>1时,结点i可能是
其双亲x的左孩子,也可能是右孩子,若是左孩子,由结论
2知,x的左孩子应为2x,即2x=i,x=i/2;若是右孩子,由
但这样结点在存储位置上的前驱后继关系并不一定就是它们
在逻辑上的邻接关系。依据二叉树的性质,完全二叉树和满
二叉树采用顺序存储比较合适,树中结点的序号可以唯一地
反映出结点之间的逻辑关系,这样既能够最大可能地节省存
储空间,又可以利用数组元素的下标值确定结点在二叉树中
的位置,以及结点之间的关系。

徽 理
完全二叉树的顺序表示
编号(从第1层到第 log2n +1层,每层从左到右),则对任
一结点i(1 ≤ i ≤ n),有:
1. 如果i=1,则结点i无双亲,是二叉树的根;如果i>1,
则其双亲是结点 i/2 。 2. 如果2i>n,则结点i为叶子结点,无左孩子;否则,其
左孩子是结点2i。
3. 如果2i+1>n,则结点i无右孩子;否则,其右孩子是结
树构成(即不存在度大于2的结点),并且左、右子树本身也
是二叉树。 说明: 1. 二叉树中每个结点最多有两棵子 树,二叉树每个结点度小于等于2;
A
B
D
E
C F
2. 左、右子树不能颠倒——有序树;
G
3. 二叉树是递归结构,在二叉树的定
义中又用到了二叉树的概念。

徽 理
二叉树的形态



φ
L
(a)
(b)
KL
M
分支结点:度不为0的结点;如A、B、C、D
结点层次:根结点的层定义为1,根的孩子为第二层结点,依此
类推。
树的高度:树中结点的最大层次;如图所示树的高度为4。
树的度: 树中各结点的度的最大值;如图所示树的度为3。
森林:m(m>=0)棵互不相交的树的集合;

徽 理
树型结构和线性结构的结构特点对比
命题成立。

徽 理
6.2.2 二叉树的性质

大 分析:根据完全二叉树的结构和编号规则,在i的左孩子前面的 学
两个结点是结点i-1的左、右孩子,由归纳假设有:结点i-1的左
孩子为2(i-1),右孩子为2(i-1)+1。
…...
…...
…... i-1
i …...
…... i-1
2(i-1) 2(i-1)+1 2i 2i+1

徽 理
一般二叉树的顺序表示

大 一般二叉树也按完全二叉树形式存储,只有增添一些并不存 学 在的空结点(用Ø表示,Ø 表示该处没有元素存在,仅仅为了好理
解),使之成为一棵完全二叉树的形式,然后再用一维数组顺序
存储。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
ABCDØE F GHØØØØ I J
(c)
L
R
R
(d)
(e)
(a) 空树
(b) 只含根结点
(d) 左右子树均不为空树
(c) 右子树为空树 (e) 左子树为空树

徽 理
6.2.2 二叉树的性质

大 学
性质1 在二叉树的第 i 层上至多有 2i - 1个结点。(i ≥ 1)
[证明用归纳法]
证明:当i=1时,只有根结点,2 i-1=2 0=1。
证明:设完全二叉树的深度为 k,则根据性质2和完全二叉
树的定义有
2k-1 - 1 < n ≤ 2k- 1或 2k-1 ≤ n < 2k
取对数 k-1 < log2n ≤ k,又k是整数, 因此有 k = log2n +1

徽 理
6.2.2 二叉树的性质

大 学
性质5: 如果对一棵有n个结点的完全二叉树的结点按层序
来指示着元素的逻辑关系。通常采用二叉链表来存储。
链表中每个结点由三个域组成,除了数据域外,还有
两个指针域,分别用来给出该结点左右孩子所在的结点的
存储地址。其定义如下:
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild;
H的祖先为A、D。
子孙结点:以某结点为根的子树中的任一结点称为该结点的子孙;
如A的子孙为B、C、D、E、F、G、H、I、J、K、L、M。

徽 理
基本术语

大 结点的度:结点子树的个数; 学 如D的度为3。
叶子结点:也叫终端结点,是
A
B
C
D
E
FG H I J
度为0的结点;如K、L、F、G 、M、I、J。


如何反映结点之

间的逻辑关系?
A
B
C
DE
F
G
例如:
H I JK L
bt[3]的双亲为└3/2┘=1,即在
bt[1]中;
1 2 3 4 5 6 7 8 9 10 11 12 其左孩子在bt[2i]=bt[6]中; A B C D E F G H I J K L 其右孩子在bt[2i+1]=bt[7]中。
又能很快确定结点的存放位置、以及结点的双亲和左右孩
子的存放位置,但对一般二叉树,可能造成存储空间的浪
费。
例如,深度为k,且只有k个结
1
点的右单支树(每个非叶结点只
2
有右孩子),也需2k-1个单元,
即有(2k-1)- k个单元被浪费。
k

徽 理
链式存储结构

大 学
❖ 所谓链式存储是指,用链表来表示一棵二叉树,即用链
假设对所有j, 1≤j﹤i,命题成立,即第j层上至多有2 j-1 个
结点。
由归纳假设第i-1 层上至多有 2i -2个结点。
由于二叉树的每个结点的度至多为2,故在第i层上的最大结
点数为第i-1层上的最大结点数的2倍,即2×2i -2= 2 i-1。

徽 理
6.2.2 二叉树的性质

大 学
性质2 深度为 k 的二叉树至多有 2 k-1个结点(k ≥1)。
相关文档
最新文档