树和二叉树

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



①DLR
②DRL
先左后右 ③LDR

⑤LRD
先右后左 ④RDL ⑥RLD
29
第 6 章 树和二叉树
A
6.4 二叉树的遍历
B
C
先(根)序遍历的递归定义:

D
EF
G


vo若id二叉Pr树eO为rd空er树(B,iT则re空e 操ro作ot);否则,
构 与 算
{ (1)访问根结点; (2)if (先ro序ot遍!=历NU左L子L)树;

(3){ 先序遍历右子树。
先序Vi遍si历t(r结o果ot:->dAatBa)D; G C E F PreOrder(root ->LChild);
PreOrder(root ->RChild);
} 30
}
第 6 章 树和二叉树
A
6.4 二叉树的遍历
B
C
中(根)序遍历的递归定义:

D
EF
G


vo若id二叉InO树r为de空r(B树iT,re则e空ro操ot作) ;否则,
据 种编码能将待处理数据压缩得尽可能的短。

构 实例二:表达式的树形表示
与 算
任意一个表达式,均可以用树形结构来表示,由于大
法 部分的算术运算符有两个操作数,所以可用二叉树来表示
一个算术表达式,表达式树中并无括号,但其结构却有效
地表达了其运算符间的运算次序。另外,利用二叉树的遍
历等操作,还可得到表达式的三种不同的表示形式:前缀


数据关系 R:
与 算
若D为空集,则称为空树 。

否则:
(1) 在D中存在唯一的称为根的数据元素root;
(2) 当n>1时,其余结点可分为m (m>0)个互
不相交的有限集T1, T2, …, Tm,其中每一 个子集本身又是一棵符合本定义的树,
称为根root的子树。 4
第 6 章 树和二叉树
6.2 树的概念
表达式、中缀表达式、后缀表达式,并可以实现表达式的
求值运算。 2
第 6 章 树和二叉树 6.1 应用实例
实例三:等价类划分问题
等价关系是现实世界中广泛存在的一种关系,许多应
数 用问题可归结为按给定的等价关系将集合划分为等价类的
据 结 构 与
问题。问题可描述为:若R是集合S上的一个等价关系,则 由R可得到集合S的唯一划分,即可以按R将S划分为若干个 不相交的子集S1,S2,…,这些子集的并集等于S,子集Si
a
法 中编号为 1 至 n 的结点一一对应。
关系:
b
c
满二叉树必为完全二叉树, d
e
f
g
而完全二叉树不一定是
满二叉树。
hi j
21
完全二叉树
第 6 章 树和二叉树
6.3 二叉树
重要性质:

④具有 n 个结点的完全二叉树的深度为
据 结
log2n +1 。


证明:设完全二叉树的深度为 k

则根据第二条性质得 2k-1 -1 < n ≤ 2k -1
D
E
G
F}BiT∧NoDde, *Bi∧TreEe;∧ ∧ F ∧
∧ G∧
含有n个结点的二叉链表中有2n个指针域,n+1个空26域。
第 6 章 树和二叉树
6.3 二叉树
存储结构:② 链式存储结构:三叉链表


结点结构: pawenku.baidu.coment lchild data rchild

root



A
∧A

B
C
第 6 章 树和二叉树
6.1 应用实例
6.2 树的概念

6.3 二叉树


6.4 二叉树的遍历


6.5 线索二叉树


6.6 树和森林
6.7 哈夫曼树及其应用
6.8 实例分析与实现
6.9 算法总结
1
第 6 章 树和二叉树 6.1 应用实例
实例一:数据压缩问题

在信息传输、数据压缩问题中,我们总是希望找到一
C
D
25
第 6 章 树和二叉树
6.3 二叉树
存储结构:② 链式存储结构:二叉链表

据 结 构
结点结构: typeldcehfildstrduacttaNorcdheild
{
root
与 算
A
DataType dAata; struct Node * lchild;

B
C
structBN∧ode * rcChild;

与 ③树的度: 树中所有结点的度的最大值

法 ④叶子结点: 度为零的结点
⑤分支结点: 度大于零的结点
⑥(从根到结点的)路径:
由从根到该结点所经分支和结点构成。
12
第 6 章 树和二叉树
A
6.2 树的概念
B
C
D
E
F GH I J
基本术语
K
L
M
数 ⑦孩子结点:一个结点的直接后继
据结构与算数据结构
⑧双亲结点: 一个结点的直接前驱 ⑨兄弟结点: 同一双亲结点的孩子结点之间互称~。

算 最后一个元素(无后继)。
法 其它数据元素
(一个前驱、一个后继)
树型结构
根结点(无前驱)
多个叶子结点 (无后继) 其它数据元素 (一个前驱、多个后继)
11
第 6 章 树和二叉树
A
6.2 树的概念
B
C
D
E
F GH I J
基本术语
K
L
M
数 据
①结点:数据元素+若干指向子树的分支
结 ②结点的度: 分支的个数
例如:
A

据 结
B



E
F

C
D
G
H
I
J
K
L
M
A( B(E, F(K, L)), C(G), D(H, I, J(M)) )

T1
T2
T3
5
第 6 章 树和二叉树
6.2 树的概念 表示方法:①树型表示

a

结 构
b
c


d e fg
h

ij
6
第 6 章 树和二叉树
6.2 树的概念 表示方法:②文氏图表示
23
第 6 章 树和二叉树
6.3 二叉树
存储结构:
数 据
① 顺序存储结构
结 构
② 链式存储结构



24
第 6 章 树和二叉树
6.3 二叉树
存储结构:① 顺序存储结构 一维数组bt[n]

是用一组连续的存储单元来存放二叉树的数据元素 。


A
A
构 与
B
C
B


D
E
F
G
C
H I J KL
D
ABCDE F GHI J KL A B
算 法
Ⅱ. 假设i=k时成立,即第k层上至多有2k-1个结点;
Ⅲ. 那么第k+1层上最多有2k-1×2个,即2k个 。
结论成立,证毕。
18
第 6 章 树和二叉树
6.3 二叉树
重要性质:

②深度为 k 的二叉树上至多含 2k-1 个结点(k≥1)。
据 结
证明:


基于上一条性质,深度为 k 的二叉树上的结点数至多为
6.2 树的概念
定义:①每个结点的度都不大于2;

②每个结点的孩子结点次序不能任意颠倒。

满足以上两个条件的树型结构为二叉树。

构 与 算
二叉树或为空树,或是由一个根结点加上两棵分 别称为左子树和右子树的、互不相交的二叉树组成。

左子树
A
右子树
根结点
B
D
E
F
H
J
K
L
M
15
第 6 章 树和二叉树
6.3 二叉树
算 称为S的R等价类。

实例四:N皇后问题
N皇后问题要求在一个NN格的棋盘上放置N个皇后,
使其互不攻击。按规则,互不攻击的约束条件为:任意两
个皇后不能处于同一行、同一列或同一对角线上,现要求
给出满足约束条件的所有棋盘布局。
3
第 6 章 树和二叉树
6.2 树的概念
定义:

数据对象 D:

D是具有相同特性的数据元素的集合。
B∧
C
D
E
G
F ∧D
∧ E∧ ∧ F∧
∧ G∧
27
第 6 章 树和二叉树
6.4 二叉树的遍历
遍历二叉树:
数 “遍历”是任何类型均有的操作,对线性结构而
据 结 构
言,只有一条搜索路径(因为每个结点均只有 一个后继),故不需要另加讨论。
与 算
二叉树是非线性结构,每个结点有两个后继
法 顺着某一条搜索路径访问二叉树中的结点,使
A
6.3 二叉树的遍历与线索化
B
C
后(根)序遍历的递归定义:

D
EF
G


vo若id二叉Po树st为Or空de树r(,Bi则Tr空ee操ro作o;t) 否则,
构 与
{ (1)后序遍历左子树;

(2)if (后ro序ot遍!=历NU右L子L)树;

(3){ 访问根结点。
后序Po遍s历tO结rd果e:r(rGooDt -B>LEChFildC); A PostOrder(root ->RChild);


20+21+ +2k-1 = 2k-1
19
第 6 章 树和二叉树
6.3 二叉树
重要性质:

③ 对任何一棵二叉树,若它含有n0 个叶子结点、
据 结 构
n2 个度为 2 的结点,则必存在关系式: n0 = n2+1。
与 算
证明:设二叉树上结点总数 n = n0 + n1 + n2

又二叉树上分支总数 b = n1+2n2
与 算
全二叉树中任意一个编号为 i 的结点:
法 (1) 若 i=1,则该结点是二叉树的根,无双亲,
否则,编号为 i/2 的结点为其双亲结点;
(2) 若 2i>n,则该结点无左孩子,
否则,编号为 2i 的结点为其左孩子结点;
(3) 若 2i+1>n,则该结点无右孩子结点,
否则,编号为2i+1 的结点为其右孩子结点。
形态: 5种




与 算 法
空二叉树
只有根结点 的二叉树
只有左子树 的二叉树
只有右子树 的二叉树
左、右子树均 非空的二叉树
16
第 6 章 树和二叉树
6.3 二叉树
基本操作:
①Initiate(bt);
数 据
②Destory (bt);

③Creat (bt);

④Empty(bt);
与 算
⑤Root(bt);
构 与 算
{ (1)中序遍历左子树; (2)if (访ro问ot根!=结NU点L;L)

(3){ 中序遍历右子树。
中序In遍O历rd结e果r(:rooDt G->LBCAhilEd);C F Visit(root ->data);
InOrder(root ->RChild);
} 31
}
第 6 章 树和二叉树

④TreeEmpty(Tree);
与 算
⑤Root(Tree);

⑥Parent(Tree,x);
⑦FirstChild(Tree,x);
⑧NextSibling(Tree,x);
⑨InsertChild(Tree,p,Child);
⑩DeleteChild(Tree,p,i); 14
第 6 章 树和二叉树

9
第 6 章 树和二叉树 6.2 树的概念
有向树:有确定的根;

树根和子树根之间为有向关系。
据 结
有序树:子树之间存在确定的次序关系。
构 与
无序树:子树之间不存在确定的次序关系。


10
第 6 章 树和二叉树
6.2 树的概念
树型结构和线性结构的结构特点


线性结构

构 第一个数据元素 (无前驱)
而 b = n-1 = n0 + n1 + n2 - 1
由此, n0 = n2 + 1
20
第 6 章 树和二叉树
1
6.3 二叉树
2
3
特殊的二叉树
4
5
6
7
数 据 结
满二叉树
8 9 10 11 12 13 14 15 满二叉树
深度为k且含有2k-1个结点的二叉树。
构 完全二叉树
与 算
树中所含的 n 个结点和满二叉树
Visit(root ->data);
} 32
}
第 6 章 树和二叉树 6.4 二叉树的遍历
练习
A

B
C


D
E
FG

与 算
H
JK

I
先序:ABDEHICFJGK

⑩堂兄弟、祖先结点、子孙结点
结点的层次: 假设根结点的层次为1,依次累加。
树的深度:树中叶子结点所在的最大层次 森林:是m(m≥0)棵互不相交的树的集合
13
第 6 章 树和二叉树
6.2 树的概念
基本操作
①InitTree(Tree);
数 据
②DestoryTree(Tree);

③CreatTree(Tree);

⑥Parent(bt,x);
⑦LeftChild(bt,x);
⑧RithtChild(bt,x);
⑨Traverse(bt);
⑩Clear(bt); 17
第 6 章 树和二叉树
6.3 二叉树
重要性质:

①在二叉树的第 i 层上至多有2i-1 个结点。
据 结
用归纳法证明:
构 与
Ⅰ. 当i = 1 层时,只有一个根结点:2i-1 = 20 = 1;
得每个结点均被访问一次,而且仅被访问一次。
存在如何遍历即按什么样的搜索路径遍历的问题
28
第 6 章 树和二叉树
6.4 二叉树的遍历
“二叉树”由三个基本单元组成:根结点、左
子树和右子树。若能依次遍历这三部分,就遍历了
数 据
整个二叉树。

设用L、D、R分别表示遍历左子树、访问根结点、
构 遍历右子树,对“二叉树”而言,可以有6 ?种搜索路径


2k-1 ≤ n < 2k

k-1 ≤ log2n < k
因为 k 只能是整数,因此, k =log2n + 1 。
22
第 6 章 树和二叉树
1
6.3 二叉树
2
3
重要性质:
4
5
6
7

8 9 10

完全二叉树
结 ⑤ 若对含 n 个结点的完全二叉树从上到
构 下且从左至右进行 1 至 n 的编号,则对完

据 结
a

b
e
与 算
d
ij
f

c gh
7
第 6 章 树和二叉树
6.2 树的概念
表示方法:③凹入表示
数 据
a b

d

e
与 算
i

j
f
c g
h
8
第 6 章 树和二叉树
6.2 树的概念 表示方法:④嵌套括号表示
数 据
a ( b ( d, e ( i, j ), c ( g, h ) ) )




相关文档
最新文档