06 第6章 树和二叉树

合集下载

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

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


徽 理
树的逻辑结构特点

大 学 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]中(为Ø )。

数据结构(C语言版)严蔚敏第6章 树和二叉树

数据结构(C语言版)严蔚敏第6章 树和二叉树
如图6-1(b)中结点H、I、J、K、L、M、N是叶子 结点,而所有其它结点都是分支结点。
⑷ 孩子结点、双亲结点、兄弟结点
一个结点的子树的根称为该结点的孩子结点(child) 或子结点;相应地,该结点是其孩子结点的双亲结点 (parent)或父结点。
4
如图6-1(b)中结点B 、C、D是结点A的子结点,而结 点A是结点B 、C、D的父结点;类似地结点E 、F是结 点B的子结点,结点B是结点E 、F的父结点。
这是树的递归定义,即用树来定义树,而只有 一个结点的树必定仅由根组成,如图6-1(a)所示。
2
2 树的基本术语
⑴ 结点(node):一个数据元素及其若干指向其子树的分支。 ⑵ 结点的度(degree) 、树的度:结点所拥有的子树
的棵数称为结点的度。树中结点度的最大值称为树的度。
A
B
C
D
A
E
F G HI J
同一双亲结点的所有子结点互称为兄弟结点。
如图6-1(b)中结点B 、C、D是兄弟结点;结点E 、 F是兄弟结点。
⑸ 层次、堂兄弟结点
规定树中根结点的层次为1,其余结点的层次等于 其双亲结点的层次加1。
若某结点在第l(l≧1)层,则其子结点在第l+1层。
双亲结点在同一层上的所有结点互称为堂兄弟结点。 如图6-1(b)中结点E、F、G、H、I、J。
(a) 只有根结点
K
LM N
图6-1 树的示例形式
(b) 一般的树
3
如图6-1(b)中结点A的度是3 ,结点B的度是2 ,结点 M的度是0,树的度是3 。
⑶ 叶子(left)结点、非叶子结点:树中度为0的
结点称为叶子结点(或终端结点)。相对应地,度不为 0的结点称为非叶子结点(或非终端结点或分支结点)。 除根结点外,分支结点又称为内部结点。

大学数据结构课件6.树和二叉树

大学数据结构课件6.树和二叉树

H I J K L MN O
AB C D E F GHI J KLMNO 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Байду номын сангаас
结点:i=5
父结点:i/2=5/2=2 左孩子:2i=2*5=10 右孩子:2i+1=2*5+1=11
完全二叉树:
1A
2
3
4 B5 6 C7
D
EF
G
8
1 0…0 0 0 k
证明三:
等比数列前n项和的计算公式:
Sn

a1(1 qn ) 1 q
n=k a1=1 q=2
性质3 对于一棵非空的二叉树,如果叶结点个数为n0, 度为2的结点数为n2,则有n0= n2+1。
A
证明:设n为二叉树的结点总数,n1为二叉树
中度为1的结点个数,则有:
B
C
n = n0 + n1 + n2 …… (1)
6.1.2 若干术语
(从结构上分)
B
E
F
B
F
E
K
L
K
L
无序树:树中任意一个结点的各孩子结点之间的次序构成 无关紧要的树
有序树:树中任意一个结点的各孩子结点有严格排列次序的树
6.1.3 树的表示形式
(1)倒悬树法(直观表示) (2)集合包含关系图法 (3)凹入表示法
B
E
F
KL
A
H
M
D J
I
CG
A
BC
child next
1 3 6∧
2∧ 4
7
8∧
B
D
E

数据结构第6章树和二叉树基本概念和二叉树

数据结构第6章树和二叉树基本概念和二叉树
若D仅含一个数据元素,则R为空集,否则 R={H},H是如下二元关系 (1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2) 对唯若任一D-意存{r在jo≠ok数t}(!1据=≤Φ元j,,素则kx≤i存∈m在D)有i,DD-有{j∩r<oDrookt=o}tΦ的,,一xi且>个∈对划H任分;意D的1, Di(21,≤…i≤, Dmm)(,m>0), (3)是有的对一一H应棵j∩个于符H划Dk合=-分Φ{本r,Ho定o对1t,义}任的H的意2划,子i分(…树1,≤,,HiH≤称-m{m为(<m)r,根o>o0Hrt)o,,i是otx对的D1>i任子上,意树的…j。二,≠k元<(r1o关≤ot系j,,,xkm≤(>D}mi,有){,H唯i}一) 基本操作P: } ADT Tree
§6.1 树的基本概念
❖树结构和线性结构的比较
线 第一个数据元素(无前驱) 性 最后一个数据元素(无后继) 结 构 其它元素(一个前驱、一个后继)
根结点(无前驱) 树 结 多个叶子结点(无后继) 构
其它结点(一个前驱、多个后继)
§6.1 树的基本概念
❖树的抽象类型定义
ADT Tree{ 数据对象D:是具有相同特性的数据元素的集合 数据关系R:若D为空集,则称为空树;
❖嵌套集合表示法
A C
G
B EF
D HJ
I
KL
嵌套集合:是一些集合的集体, 对于其中任何两个集合, 或不相交,或一个包含另一个 的形式表示。
§6.1 树的基本概念
❖凹入表示法
A***************** B*************** E************* F************* K*********** L*********** C*************** G************* D*************** H************* I************* J*************

第6章树和二叉树

第6章树和二叉树
2.孩子表示法 孩子表示法 在结点中设置指向每个孩子的指针域, 在结点中设置指向每个孩子的指针域,利用指针 指向该结点的所有孩子结点。 指向该结点的所有孩子结点。 大多采用按树的度设置结点的指针域的个数。 大多采用按树的度设置结点的指针域的个数。
9
6.1.4 树的存储结构
3.孩子兄弟表示法 孩子兄弟表示法 在结点中设置两个指针域, 在结点中设置两个指针域,一个指针域指向该结 点的第一个孩子,另一个指针域指向其右兄弟。 点的第一个孩子,另一个指针域指向其右兄弟。
2
6.1.1树的定义 树的定义
结点的度:结点所拥有子树的个数称为结点的度。 结点的度:结点所拥有子树的个数称为结点的度。 子树 称为结点的度 树的度:树中所有结点的度的最大值称为树的度。 最大值称为树的度 树的度:树中所有结点的度的最大值称为树的度。 叶结点:度为零的结点称为叶结点。也称终端结点 终端结点或 叶结点:度为零的结点称为叶结点。也称终端结点或叶 子 分支结点:度不为零的结点称为分支结点。也称非终端 分支结点:度不为零的结点称为分支结点。也称非终端 结点。除根结点以外,分支结点也称为内部结点。 结点。除根结点以外,分支结点也称为内部结点。 孩子结点和双亲结点: 孩子结点和双亲结点:树中一个结点的子树的根结点称 为孩子结点。该结点就称为孩子结点的双亲结点。 为孩子结点。该结点就称为孩子结点的双亲结点。 兄弟结点:具有同一双亲的孩子结点互为兄弟结点。 兄弟结点:具有同一双亲的孩子结点互为兄弟结点。 结点的祖先:从根到该结点所经分支上的所有结点, 结点的祖先:从根到该结点所经分支上的所有结点,称 为结点的祖先。 为结点的祖先。
17
6.2.2 二叉树的性质
性质4 具有n( 性质 具有 (n>0)个结点的完全二叉树的深度 )个结点的完全二叉树的深度h= log 2 n + 1 证明: 证明: 根据完全二叉树的定义可知深度为h-1层及以上的结点构成 根据完全二叉树的定义可知深度为 层及以上的结点构成 满二叉树,因此由性质2得深度为 得深度为h的完全二叉树满足 满二叉树,因此由性质 得深度为 的完全二叉树满足 n>2h-1-1和n≤2h-1 和 整理后得到 2h-1≤n<2h 不等式两边取对数, 不等式两边取对数,得 h-1≤log2n<h 由于h为正整数 为正整数, 由于 为正整数,因此 h= log 2 n + 1

第6章树和二叉树好精品PPT课件

第6章树和二叉树好精品PPT课件
或深度为k的满二叉树中编号从1到n的前n个结点构成了一棵深度 为k的完全二叉树。
其中 2k-1 ≦ n≦2k-1 。
完全二叉树是满二叉树的一部分,而满二叉树是完全二叉树的特 例。
•完全二叉树的特点:
若完全二叉树的深度为k ,则所有的叶子结点都出现在第k层
或k-1层。对于任一结点,如果其右子树的最大层次为l,则其左 子树的最大层次为l或l+1。
结点的层次:从根开始定义为第1层,根的孩子
v
为第二层……。
树的深度(高度):树中结点的最大层数。
森林(forest):是m(m ≥ 0)棵互不相交的树
的集合。
6.2 二叉树
6.2.1 二叉树的定义 1 二叉树的定义
二叉树(Binary tree)是n(n≥0)个结点的有限集 合。若n=0时称为空树,否则: ⑴ 有且只有一个特殊的称为树的根(Root)结点; ⑵ 若n>1时,其余的结点被分成为二个互不相
(a) 二叉链表结点
(b) 三叉链表结点
图6-7 链表结点结构形式
(2) 二叉树的链式存储形式
例有一棵一般的二叉树,如图6-8(a)所示。以二叉链表和三叉链表 方式存储的结构图分别如图6-8(b) 、 6-8(c)所示。
a b cd
T a⋀
b ⋀c ⋀ d
T a ⋀⋀
b ⋀c ⋀ d
交的子集T1,T2,分别称之为左、右子树,并 且左、右子树又都是二叉树。 由此可知,二叉树的定义是递归的。
2 二叉树的基本形态 二叉树有5种基本形态,如图6-3所示。
AA
A
A
(a) (b)
(c) (d)
(e)
(a) 空二叉树 (b) 单结点二叉树 (c) 右子树为空

第6章(树和二叉树)

第6章(树和二叉树)

k
k
(第i层上的最大结点数) 2i1 2k 1
i 1
i 1
9/106
性质3: 对任何一棵二叉树T,如果其终端结点数为n0,度为2的 结点数为n2,则n0=n2+1。
设二叉树中度为1的结点数为n1,二叉树中总结点数为N,因为二 叉树中所有结点的度均小于或等于2,所以有:
N=n0+n1+n2
(b)i和i+1结点不在同一层
图6.6 完全二叉树中结点i和i+1
当i=1时,就是根,因此无双亲。
当i>1时,如果i为左孩子,即2×(i/2)=i,则i/2是i的双亲; 如果i为右孩子,i=2p+1,i的双亲应为p,p=(i-1) /2=i/2。 证毕。
19/106
6.2.3 二叉树的存储结构
PreOrder(bt->rchild); }
1、顺序存储结构
#define MAX_TREE_SIZE 100 typedef TElemType SqBiTree[ MAX_TREE_SIZE]; SqBitree bt;
按照顺序存储结构的定义,在此约定,用一组地址连续的 存储单元依次自上而下、自左至右存储完全二叉树上的结 点元素,即将完全二叉树上编号为i的的结点元素存储在 如上定义的一维数组中下标为i-1的分量中。
F G H I J 结点L的双亲:E
KL
结点A的孩子:B,C,D 结点B的孩子:E,F
M
结点F,G为堂兄弟 结点A是结点F、G的祖先
结点B,C,D为兄弟 结点K,L为兄弟
5/106
6.2 二叉树
二叉树在树结构的应用中起着非常重要的作用,因为针对二 叉树的许多操作算法简单,而任何树都可以与二叉树相互转 换,这样就解决了树的存储结构及其运算中存在的复杂性。

第六章树和二叉树

第六章树和二叉树

6.2 二叉树
二叉树的定义
定义
二叉树是n(n0)个结点的有限集合,它或为空 树(n=0),或由一个根结点和两棵互不相交的左 子树和右子树的二叉树组成。
二叉树的特点:
定义是递归的; 0结点的度2; 是有序树。
二叉树(续)
二叉树的五种基本形态
两种特殊的二叉树
满二叉树:每一层上的结点数都是最大结点数。
树的表示方法
A
B
C
D
EF G
HI
1层 特点:除根结点外, 每个结点都仅有一 个前趋(父)结点。
2层 其它表示方法:
嵌套集合表示法
凹入表表示法
3层
参见教材120页
J
4层
树的一些基本术语
结点的度(degree)
结点所拥有的子树的数目。
叶子结点(leaf--又称终端结点 terminal node)
} }
利用遍历结果确定二叉树问题
利用遍历结果确定二叉树问题
先序序列+中序序列 中序序列+后序序列 先序序列+后序序列 (x)
A
B
F
C
G
先序序列: ABCDEFGH 中序序列: BDCEAFHG
DE H
思考:层序+先序/中序/后序, 能否确定?如何做?
例如:层序ABCDEFGHIJ,中序DBGEHJACIF
} }
void Inorder(BiTree t) {
if (t) { Inorder(t->lchild); visit(t); Inorder(t->rchild);
} }
void Postorder(BiTree t) {
if (t) { Postorder(t->lchild); Postorder(t ->rchild); visit( t );

第6章树和二叉树

第6章树和二叉树

23
§6.3 遍历二叉树
• 遍历二叉树 • 遍历二叉树的递归与非递归算法 • 表达式求值 • 二叉树的运算举例 • 层序遍历二叉树
计算机科学与技术学院——数据结构
24
§6.3 遍历二叉树
§6.3.2 遍历二叉树的递归与非递归算法(1)
先序遍历二叉树
若二叉树为空,则空操作;否则

访问根;
先序遍历左子树;
具有三个结点的树与二叉树
A、三个结点的树有两种不同的形态
B、三个结点的二叉树有五种不同的形态
树型结构的共同特征:层次性、分支性
计算机科学与技术学院——数据结构
10
§6.2 二叉树
§6.2.1 二叉树的定义(3)
二叉树的基本操作
初始化空二叉树 销毁二叉树 创建二叉树 清空二叉树 判断空二叉树 求二叉树深度 求双亲 求左孩子 求右孩子 求左兄弟 求右兄弟 插入子树 删除子树 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 按层次遍历
InitTree(&T); DestroyTree(&T); CreateTree(&T, definition); ClearTree(&T); TreeEmpty(T); TreeDepth(T); parent(T, cur_e); LeftChild(T, cur_e); RightSibling(T, cur_e); InsertChild(&T, &p, i, c); DeleteChild(&T, &p, i); TraverseTree(T, visite());
∧G ∧
三叉链表表示
计算机科学与技术学院——数据结构

第六章树和二叉树

第六章树和二叉树

k
k
(第 i层的最大 )结2i点 12数 k 1
i1
i1
❖性质3:对任何一棵二叉树T,如果其终端结点数为n0, 度为2的结点数为n2,则n0=n2+1
证明:n1为二叉树T中度为1的结点数 因为:二叉树中所有结点的度均小于或等于2 所以:其结点总数n=n0+n1+n2 又二叉树中,除根结点外,其余结点都只有一个 分支进入 设B为分支总数,则n=B+1 又:这些分支是由度为1和度为2的结点射出, B=n1+2n2 于是,n=B+1=n1+2n2+1=n0+n1+n2 n0=n2+1
f
gh
4. 嵌套括号表示
a ( b ( d, e ( i, j ),f), c ( g, h ) )
★树的存储结构
※ 1. 双亲表示法
实现:结构数组存放树的结点,每个结点含两个域 数据域:存放结点本身信息 双亲域:指示本结点的双亲结点在数组中位置
特点:找双亲容易,找孩子难
typedef struct node { datatype data;
int parent; }JD; JD t[M];
a
b
c
d
e
f
gh i
如何找孩子结点
0号单元不用或
存结点个数
data
parent
00
9
1
a
0
2
b
1
3
c
1
4
d
2
5
e
2
6f
3
7g
5
8h
5
9i
5
※ 2. 孩子表示法

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

数据结构 第6章 树和二叉树
证:设二叉树中度为1的结点数为n1,二叉树中总结点数为N,因为二叉 树中所有结点的度均小于或等于2,所以有:N=n0+n1+n2 (6-1) 再看二叉树中的分支数,除根结点外,其余结点都有一个分支进入,设 B为二叉树中的分支总数, 则有:N=B+1。由于这些分支都是由度为 1和2的结点射出的,所以有: B=n1+2*n2 ,即 N=B+1=n1+2×n2+1 (6-2) 由式(6-1)和(6-2)得到: n0=n2+1
第6章 树和二叉树 章
本章主要内容是: 本章主要内容是: 树和二叉树的定义、性质、存储形式; 树和二叉树的定义、性质、存储形式; 二叉树的遍历; 树、二叉树的遍历;树、森林和二叉树 之间的转换;线索二叉树;等价类问题; 之间的转换;线索二叉树;等价类问题; 哈夫曼树。 哈夫曼树。
1
6.1 树的定义和基本操作
三叉链表
(3). 静态二叉链表和静态三叉链表
17
6.3 遍历二叉树
在二叉树的一些应用中,常常要求在 树中查找具有某种特征的结点,或者对树 中全部结点逐一进行某种处理。这就引入 了遍历二叉树的问题,即如何按某条搜索 路径巡访树中的每一个结点,使得每一个 结点均被访问一次,而且仅被访问一次。
18
6.3.1 遍历二叉树
9
思考题
n个结点的二叉树最大高度是( ); 最小高度是( )。 n个结点的二叉树中若有m个树叶,则一 定有( )个度为1的结点;( )个 度为2的结点。 高度为h的完全二叉树中至少有( )个 结点;至多有( )个结点。
10
6.2.3 二叉树的存储结构
(1) 顺序存储结构(数组表示) 数组表示) 它是用一组连续的存储单元存储二叉树的数 据元素。因此,必须把二叉树的所有结点安排成 为一个恰当的序列,结点在这个序列中的相互位 置能反映出结点之间的逻辑关系(父子关系) ,可 用编号的方法表示。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

具体参见图6-3 。
A B E J K L F C G D H M I 图
2012年9月27日星期四
6-3
图 6 -1 (c) 的 树 的 凹 入 法 表 示
14
3. 嵌套集合表示法
具体参见图6-4 。
A B E G K F L H M
C
J D
I

2012年9月27日星期四
6-4
图 6 - 1 ( c) 的 树 的 集 合 表 示
2012年9月27日星期四 10
9.分枝结点
除叶子结点外的所有结点,为分枝结点,也叫 非终端结点。
10.层数
根结点的层数为1,其它结点的层数为从根结点 到该结点所经过的分支数目再加1。
11. 树的高度(深度) 树中结点所处的最大层数称为树的高度,如空 树的高度为0,只有一个根结点的树高度为1。
12.树的度
15
4.广义表表示法 对图6-1(c)的树结构,广义表表示法可表示为: (A(B(E(J,K,L),F),C(G),D(H(M),I)))
6.1.4 树的性质
性质1 树中的结点数等于所有结点的度加1。
证明:根据树的定义,在一棵树中,除根结点以 外,每个结点有且仅有一个直接前驱,也就是说,每 个结点与指向它的一个分支一一对应,所以,除根结 点以外的结点数等于所有结点的分支数(即度数), 而根结点无直接前驱,因此,树中的结点数等于所有 结点的度数加1。
把值为x的结点作为值为y的结点的第i个孩子插入到树中。 (6) delchild(x,i)
删除值为x的结点的第i个孩子。
(7) traverse(T)
遍历或访问树T。
2012年9月27日星期四 8
6.1.2 基本术语
1.结点
指树中的一个数据元素,一般用一个字母表示。 2.度 一个结点包含子树的数目,称为该结点的度。 3.树叶(叶子) 度为0的结点,称为叶子结点或树叶,也叫终端结点。 4.孩子结点 若结点X有子树,则子树的根结点为X的孩子结点, 也称为孩子,儿子,子女等。如图6-1(c)中A的孩 子为B,C,D。
D
a[ 7 ] C 0 D 0 E 1 F 2 G 2 H 3
a[ m ax s in e- 1 ] … …
B
C
A -1
B 0
E
F
G
H
p ar en t
(a)树 的 结 构
( b) 树 的 双 亲 表 示 法
图 6 -2 1 树 的 双 亲 表 示 示 意 图
2012年9月27日星期四
19
2.孩子表示法
2012年9月27日星期四 12
6.1.3
树的表示
1.树形结构表示法 具体参见图6-1 。
A B C
D
E
F
G
H
I
Ø
A
J
K
L
M
( a ) 空 树 ( b) 仅 含 有 根 结 点 的 树
( c) 含 有 多 个 结 点 的 树
图 6 -1 树 的 示 意 图
2012年9月27日星期四 13
2. 凹入法表示法
第6章 树和二叉树
数据结构(C++描述)
2012年9月27日星期四
1
本章主要内容
6.1 树的基本概念 6.2 二叉树
6.3
遍历二叉树
6.4 线索二叉树
6.5
树和森林
哈夫曼树
2
6.6
2012年9月27日星期四
6.1 6.1.1 树的定义
树的基本概念
1.树的定义
树是由n(n≥0)个结点组成的有限集合。若n=0,称为 空树;若n>0,且满足: (1)有一个特定的称为根(root)的结点。它只有直 接后继,但没有直接前驱; (2)除根结点以外的其它结点可以划分为m(m≥0) 个 互 不 相 交 的 有 限 集 合 T0 , T1 , … , Tm-1 , 每 个 集 合 Ti (i=0,1,…,m-1)又是一棵树,称为根的子树,每棵子树的 根结点有且仅有一个直接前驱,但可以有0个或多个直接后 继。 由此可知,树的定义是一个递归的定义,即树的定义 中又用到了树的概念。树的结构参见图6-1。
B C
D
G E F
H
I
M
J
K
L (a ) T 0 子 树 (b)T 1 子 树 (c)T 2 子 树
图 6-2
2012年9月27日星期四
图 6-1(C )的 树 的 三 个 子 树
5
2.树的逻辑结构描述
一棵树的逻辑结构可以用二元组描述为:
tree =(k,R)
k={ki∣1≤i≤n;n≥0,kielemtype} R={r} 其中,n为树中结点个数,若 n=0,则为一棵空树, n> 0 时称为一棵非空树,而关系 r 应满足下列条件: (1)有且仅有一个结点没有前驱,称该结点为树根; (2)除根结点以外,其余每个结点有且仅有一个直接前驱; (3)树中每个结点可以有多个直接后继(孩子结点)。
(9) createtree(&T) 建立一棵二叉树T。 (10)addlchild(&T,x,y) 在二叉树T中,将值为y的结点作为值为x 的结点的左孩子插入。 (11)addrchild(&T,x,y) 在二叉树T中,将值为y的结点作为值为x 的结点的右孩子插入。 (12)dellchild(&T,x) 在二叉树T中,删除值为x 的结点的左孩子。 (13)delrchild(&t,x) 在二叉树T中,删除值为x 的结点的右孩子。
2012年9月27日星期四 6
例如,对图6-1(c )的树结构,可以二元组表示为: K={A,B,C,D,E,F,G,H,I,J,K,L,M} R={r} r={(A,B),(A,C),(A,D),(B,E),(B,F),(C,G),(D,H), (D,I),(E,J),(E,K),(E,L),(H,M)}
2012年9月27日星期四 3
A B
C
D
E
F
G
H
I
Ø
A
J
K
L
M
( a) 空 树 ( b) 仅 含 有 根 结 点 的 树
( c) 含 有 多 个 结 点 的 树
图 6-1 树 的 示 意 图
2012年9月27日星期四 4
在图6-1(c)中,树的根结点为A,该树还可以分为三个互不 相交子集T0,T1,T2,具体请参见图6-2,其中T0={B,E,F, J,K,L},T1={C,G},T2={D,H,I,M},其中的T0,T1, T2都是树,称为图6-1(C)中树的子树,而T0,T1,T2又可以 分解成若干棵不相交子树。如T0可以分解成T00,T01两个不相 交子集,T00={E,J,K,L},T01={F},而T00又可以分为三个 不相交子集T000,T001,T002,其中,T000={J},T001={K}, T002={L}。
2012年9月27日星期四 23
Ø
L L R
R
(a)
( b) ( c) ( d) 图 6-5 二叉树的五种不同的形态
(e )
2012年9月27日星期四
24
2.二叉树的基本运算 (1)inittree(&T) 二叉树的初始化。 (2)root(T) 求二叉树的根结点。 (3)parent(T,x) 求二叉树T中值为x的结点的双亲。 (4)lchild(T,x) 求二叉树T中值为x的结点的左孩子。
将一个结点所有孩子链接成一个单链表形,而树中有 若干个结点,故有若干个单链表,每个单链表有一个表头 结点,所有表头结点用一个数组来描述,具体描述参见图 6-22
A a [1 ] a [2 ] a [3 ] B C D E ^ F ^ G ^ a [7 ] … a [m a x siz e-1 ] 图 6 -2 2 树 的 孩 子 表 示 法 ( 图 6 -2 1 ( c ) 中 树 ) 示 意 图 H ^ …
2012年9月27日星期四 25
(5)rchild(T,x) 求二叉树T中值为x的结点的右孩子。 (6)lbrother(T,x) 求二叉树T中值为x的结点的左兄弟。 (7)rbrother(T,x) 求二叉树T中值为x的结点的右兄弟。 (8)traverse(T) 遍历二叉树T。
2012年9月27日星期四 26
2012年9月27日星期四 18
h
k
1 <n≤ k 1
1 k 1 k
h 1
树的存储结构
1.双亲表示 它是以一组连续的存储单元来存放树中的结点, 每个结点有两个域:一个是data域,存放结点信息, 另一个是parent域,用来存放双亲的位臵(指针)。 该结构的具体描述见图6-21。
A
a[ 0 ] a[ 1 ] d ata
2012年9月27日星期四 27
6.2.2 二叉树的性质
2012年9月27日星期四 22
6.2
二叉树
6.2.1 二叉树的定义
1.二叉树的定义
和树结构定义类似,二叉树的定义也可以递归形式给 出: 二叉树是n(n≥0)个结点的有限集,它或者是空集 (n=0),或者由一个根结点及两棵不相交的左子树和右子 树组成。 二叉树的特点是每个结点最多有两个孩子,或者说, 在二叉树中,不存在度大于2的结点,并且二叉树是有序树 (树为无序树),其子树的顺序不能颠倒,因此,二叉树 有五种不同的形态,参见图6-5 。
2012年9月27日星期四 16
性质 2
度为k的树中第i层上最多有ki-1个结点(i≥1)。
下面用数学归纳法证明: 对于i=1,显然成立,假设对于i-1层,上述条件成立,即 第i-1层最多有ki-2个结点, 对于第i层,结点数最多为第i-1层结点数的k倍(因为度为 k),故第i层的结点数为ki-2*k= ki-1。
相关文档
最新文档