数据结构与算法-DSA04第4章树-701

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

A
B
C
D
EF
G
H IJ HIT CST
K L MN
Y
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.2 二元树 (Binary Tree)
Slide. 4 - 9
4.2.1 二元树的定义及遍历
两种特殊的二元树
[定义2]设二元树高度为K,称满足下列性质的二元树为完全二元树
(1)所有的叶都出现在K或K-1层;
{ visit ( DATA ( BT ) ) ;
中每个结点的DATA
PREORDER ( LCHILD ( BT ) ) ;
域之值。
PREORDER ( RCHILD ( BT ) ) ;
}
}
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
Slide. 4 - 16
例1-2:写一个递归函数,按 中根顺序列出二元树
while ( !ISEMPTY( T ) || EMPTY ( S ) )
进栈; 左走一步
if ( !ISEMPTY ( T ) ) { PUSH( T ,S );
T = T → LCHILD ( T ) ; }
退栈; 右走一步
else { T = TOP ( S ) ; POP ( S ) ; visit( DATA( T ) ) ;
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
Slide. 4 - 12
4.2.2 二元树的性质
性质1 性质2
性质3
二元树的第 i 层最多有 2i-1 个结点。(i 1)
[证明用数学归纳法]
高度为 K 的二元树最多有 2K - 1个结点。(K 1)
[证明用求等比级数前 K 项和的公式]
Slide. 4 - 2
4.1 基本术语 4.2 二元树 4.3 树 4.4 森林与二元树间的转换 4.5 树的应用
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.1 基本术语
Slide. 4 - 3
[定义] 1、一个结点 x 组成的集{ x }是一株树,这个结点 x 也是

这株树的根。
③ CREATEBT ( V, LT , RT ) ;
④ LCHILD ( BT ) ;
⑤ RCHILD ( BT ) ;
⑥ DATA ( BT ) ; void PREORDER ( BT )
BTREE BT ;
例1-1:写一个递归函数,按 { if ( ! ISEMPTY ( BT ) )
先根顺序列出二元树
M
4层
树的逻辑结构特点
除根结点之外,每株子树的根结点有且仅有一个直接前 驱,但可以有0个或多个直接后继。即一对多的关系,反映了 结点之间的层次关系。
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
Slide. 4 - 5
常用术语 A
4.1 基本术语 A 第1层
BCD
第2层
BC D
E FGH I JK
T = T → RCHILD ( T ) ; }
}
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.2.4 二元树的表示 一、顺序表示
1、完全(或满)二元树
(2)K-1层的所有叶都在非终结结点的右边;
(3)除了K-1层的最右非终结结点可能有一个(只能是左
分支)或两个分支之外,其余非终结结点都有两个分支。
A
A
B YES! C
B NO! C
D
EF
GD
EF
G
H I J KL HIT CST
H IJ K
M
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.2 二元树 (Binary Tree)
中每个结点的DATA 域之值。
void INORDER ( BT ) BTREE BT ; { if ( ! ISEMPTY ( BT ) )
{ INORDER ( LCHILD ( BT ) ) ; visit ( DATA ( BT ) ) ; INORDER ( RCHILD ( BT ) ) ;
的 构 造
2、假设 x 是一个结点,T1,T2,…,Tk是 k 株互不相交 的树,我们可以构造一株新树:令 x 为根,并有 k 条
性 递 归
边由 x 指向树T1,T2,…,Tk。这些边也叫做分支, T1,T2,…,Tk称作根 x 的树之子树(SubTree)。



注意!
分支 分支 分支 ▪递归定义,但不会产生循环定义。
D
策略:左孩子结点一定要在右孩子结点之前访问。
要讨论的三种遍历操作分别为:
L
R
①先根顺序DLR, ②中根顺序LDR, ③后根顺序LRD
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
Slide. 4 - 11
[二元树的遍历的递归定义]
①先根顺序遍历二元树:
②中根顺序遍历二元树:
若二元树非空则:
1A
ABCDE F GHI J
1 2 3 4 5 6 7 8 9 10
2B 3C
4 D
5
E
6 F
7G
8 9 10 H IJ
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
4.2.3 抽象数据型二元树
第4章树
Slide. 4 - 15
操作:① EMPTY ( BT ) ;
② ISEMPTY ( BT ) ;
若二元树非空则:
{ 访问根结点;
{ 中根顺序遍历左子树;
先根顺序遍历左子树;
访问根结点;
先根顺序遍历右子树;
中根顺序遍历右子树;
};
};
③后根顺序遍历二元树:
若二元树非空则:
{ 后根顺序遍历左子树; 后根顺序遍历右子树;
访问根结点;
}; 所得到的线性序列分别称为先根(序)、中根(序)和后根
(序)序列。
因此,有 2n2 + n1 = n0 + n1 + n2 - 1
n2 = n0 - 1
n0 = n2 + 1
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
Slide. 4 - 13
性质4 具有 n (n 0) 个结点的完全二元树的高度为
log2(n + 1) 或 log2 n + 1
证明:设完全二元树的高度为 K,则有
2K-1 - 1< n 2K - 1
变形 取对数 因此有
前k-1层
前k层
2K-1 < n + 1 2K K-1 < log2(n+1) K log2(n+1) = K
2K-1 n < 2K K-1 log2 n < K K = log2 n + 1
A
B
Slide. 4 - 7
4.2.1 二元树的定义及遍历
[二元树] 一棵二元树是结点的一个有限集合,该集合或者为
空,或者是由一个根结点和两棵分别称为左子树和右子 树的、互不相交的二元树组成。
结构特点 ▪每个结点最多只有两个孩子结点,即结点的度不大于2 ▪子树有左右之别,子树的次序(位置)不能颠倒。
基本形态:
{ 进栈; 左一步;}
}
21 K → #
else
} 先序: A B D J H E C F I G K L M
22 L 23 ^ 24 ^
→ #K #KL #K
→L →K
{ 退栈; 右一步;}
中序: J DH B E A F I C G L K M 25 M → #
后序: J H D E B I F L M K G C A
Slide. 4 - 10
4.2.1 二元树的定义及遍历
[二元树的遍历] 根据某种策略,按照一定的顺序访问二元树中的每一个结
点,使每个结点被访问一次且只被访问一次。结果得到二元树 结点的线性序列。
根(D)、左孩子(L)和右孩子(R)三个结点可能出现
的顺序有:
① DLR ② LDR ③ LRD
④ DRL ⑤ RDL ⑥ RLD
第3层 第4层
E F GH I J
LM
第5层 K L
M
1层
2层 height
3层 = 4
4层
▪结点的度(元)和树的度 ▪叶结点(终端结点) ▪非终端结点(分支结点) ▪子结点(儿子、子女) ▪父结点(双亲) ▪兄弟(结点)
▪路(路径) ▪路(径)长 ▪祖先(结点) ▪后代(子孙) ▪结点层、结点的高 ▪树的度
15 ^
#CF → F
16 I → #C
{ INORDER ( LCHILD ( BT ) ) ; 17 ^
#CI → I
Loop:
{ if (T 非空)
visit ( DATA ( BT ) ) ;
18 ^
#C
INORDER ( RCHILD ( BT ) ) ;
19 20
G ^
→# #G
→C →G
visit ( DATA ( BT ) ) ;
}
} HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
Slide. 4 - 17
二元树的遍历的非 递归过程 A
No. 指针T

1 A →#
2 B → #A
3 D → #AB
输出
数据结构:
B
C
4 J → #ABD

D EF G
5^ 6^ 7H
} }
void POSTORDER ( BT )
BTREE BT ;
例1-3:写一个递归函数,按
{ if ( ! ISEMPTY ( BT ) )
后根顺序列出二元树
{ POSTORDER ( LCHILD ( BT ) ) ; 中每个结点的DATA
POSTORDER ( RCHILD ( BT ) ) ; 域之值。
若i = 1, 则 i 是根结点,无父结点 若i > 1, 则 i 的父结点为i/2
若 2*i n, 则 i 有左儿子且为 2*i;否则,i 无左儿子。 若2*i+1 n, 则 i 有右儿子且为2*i+1;否则,i 无右儿子。 若 i 为偶数, 且 i n , 则有右兄弟,且为 i + 1。 若 i 为奇数, 且 i n && i != 1, 则其左兄弟,且为 i-1
#ABDJ → J #ABD → D → #AB
设栈S: 用以保留
JH
I
K
8^ 9^
#ABH → H #AB → B
当前结点;
10 E → #A
LM
11 ^
#AE → E
void INORDER ( BT )
12 ^
#A
13 C → #
→A
算法:
BTREE BT ;
14 F → #C
{ if ( ! ISEMPTY ( BT ) )
▪有序树 ▪无序树
▪森林
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.1 基本术语
Slide. 4 - 6
有序树 & 无序树
A ≠
BC
A CB
森林forest: 是 n ≥ 0 株互不相交的树的集合。
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.2 二元树 (Binary Tree)
20 + 21 + 22 + … + 2K-1 = 2K - 1 对任何一棵二元树, 如果其叶结点有 n0 个, 度为2 的非叶结点有 n2 个, 则有 n0 = n2 + 1
证明:若设度为1的结点有 n1 个,结点总数为 n,分支总 数为 B,则根据二元树的定义,
n = n0 + n1 + n2
B = 2n2 + n1 = n - 1
▪一株树的每个结点都是这株树的某株子


子 树的根。



HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.1 基本术语
-
第1层
A
+
/
a *e f
第2层 第3层
BC D
b-
第4层 E F G H I J
Slide. 4 - 4
1层 2层
height 3层 = 4
cd
第5层 K L
空 只有根结点
HIT CST
根的右子 根的左子
树为空
树为空
根的左右子 树都不空
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
4.2 二元树 (Binary Tree)
Slide. 4 - 8
4.2.1 二元树的定义及遍历 两种特殊的二元树
[定义1]高度为K且有2K-1个结点的二元树称为满二元树。
第4章树
Slide. 4 - 1
两个ADT: ADT树 ADT二元树
定义及相关术语 定义 逻辑结构及其特征
基本操作(算法)
存储结构(描述)
存储结构特点 ADT 实现 存储结构的定义
操作(算法)实现
算法的性能分析
应用
数据结构的核心算法:遍历算法
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
26 ^ 27 ^
#M #
→M 结束
};
HIT CST
哈尔滨工业大学 计算机科学与技术学院 张岩
第4章树
Slide. 4 - 18
二元树的遍历的 非递归过程
void NINORDER( BT )
BTREE BT; { STACK S ; BTREE T ;
MAKENULL( S ) ;
T = BT ;
C
D
EF
G
H I J KL HIT CST
哈尔滨工业大学 计算机科Байду номын сангаас与技术学院 张岩
第4章树
Slide. 4 - 14
性质5 完全(或满)二元树的顺序存储结构及其性质 如果将一棵有n个结点的完全二元树自顶向下,同一层自左
向右连续给结点编号, 1, 2,…,n,且使该编号对应于数组的下 标,则有以下关系:
相关文档
最新文档