《树和二叉树》PPT课件

合集下载

数据结构树和二叉树ppt

数据结构树和二叉树ppt

A
B
C
D
E
FG
H
I
J
K
LM
树形表示法
(2) 文氏图表示法。使用集合以及集合的 包含关系描述树结构。下图就是树的文氏图 表示法。
A
C B
G EF
J
H D
IK LM
文氏图表示法
(3) 凹入表示法。使用线段的伸缩描述树结 构。下图是树的凹入表示法。
(4) 括号表示法。将树的根结点写在括号的左 边,除根结点之外的其余结点写在括号中并用逗号 间隔来描述树结构。下图是树的括号表示法。
1层 层次 根为第1层
最大层数为树的深度(高度)
2层 height 3层 = 4
双亲 (直接前驱) 孩子(直接后继)
KL
M d=0 4层
兄弟 堂兄弟 子孙 祖先
森林----m(m>=0)棵互不相交的树的集合。
B EF
A BC
树和森林的遍历
A C GH
F DG E
先 深根度次优序先遍遍历历
当树非先空根次序遍历
树孩结子点结结点构的:序da号ta
}link; he指ad向ptr下一个孩子结点typedef struct
特点:很快确定孩子指结向点第一个孩子结点{ dliantkaty*pheeaddapttar;;
每个结点但拥有确孩定子双的亲个效数率不同低,
所以采用单链表链接孩子结点。
}ctree; ctree T[maxnode];
bcd
在二叉树中查找指定结点
?a
? find(BTNode *b, elemtype x) {
b
c
if(b==NULL)
return(NULL); /*空树*/

第六章树和二叉树.ppt

第六章树和二叉树.ppt

Y
D
N
Y a<60 E
E
N
A
Y
a<60 N D
C B D EA
Y a<80
a<70 N C
N a<90 Y
N
B
A
6.6 树的表示
6.6.1 树的存储结构
孩子链 表
孩子兄 弟链表
6.6.2 树的遍历
A
B
C
D
树的先根遍历算法描述如 下:
访问根结点。
EFG
H
按照从左到右的次序 先根遍历根的每一棵
之和

二叉树的带权外路径长度
n1
WPL (wi li )
i0
哈夫曼树定义为带权外路径长度最短的二叉树。 哈夫曼树不唯一
构造哈夫曼树
1、根据给定的n个权值{w1,w2,……,wn}构成n棵二叉树的集 合F={T1,T2,……,Tn},其中每棵二叉树Ti中都有一个权值为 wi的根结点,其左右子树均空。
子树。
I
J K L M 树的后根遍历算法描述如
下:
先序遍历:A B E F I
NO
GCDHJ KL NOM
按照从左到右的次序 后根遍历根的每一棵
子树。
后序遍历:E I F G B C J K N O L M H D A

访问根结点。
0 14 1
0
6 1
33
T;
8 01
4 A
0 2
41 2
CS
T : 00 ; : 01 A : 10 C : 110 S : 111
例 电文是{CAS;CAT;SAT;AT} 其编码 “11010111011101000011111000011000” 电文为“1101000” 译文只能是“CAT”

《数据结构教学课件》第08章.ppt

《数据结构教学课件》第08章.ppt

DE F
G
HI
双亲孩子表示法存储结构
(4)孩子兄弟表示法
root
A∧
B
C∧
14 of 118
A
B
C
DE F
G
HI
∧D
E
∧F∧
∧G ∧
∧H
∧I ∧
常规指针的孩子兄弟表示法
15 of 118
8.2 二叉树
1.二叉树的定义
二叉树:是n(n≥0)个结点的有限集合。n=0的树称为空 二叉树;n>0的二叉树由一个根结点以及两棵互不相交 的、分别称为左子树和右子树的二叉树组成 。
逻辑结构: 一对二(1:2) 基本特征: ① 每个结点最多只有两棵子树(不存在度大于2的结点); ② 左子树和右子树次序不能颠倒。所以下面是两棵不同
的树
16 of 118
A
B
C
A
B
C
D
左子树
G
E
F
D
E
F
G 右子树
满二叉树:在一棵二叉树中,如果所有分支结点都存在左 子树和右子树,并且所有叶子结点都在同一层上,这样的 二叉树称为满二叉树。
完全二叉树:如果一棵深度为k,有n个结点的二叉树结构与
深度为k的满二叉树的前n个结点的结构相同,那么该二叉树
称为完全二叉树。如下图所示
A
B
C
D
E
F
G
H I J K L MN O
17 of 118
A
B
C
D
E
F
G
H IJ
(b)完全二叉树
(a)满二叉树
问题:一个深度为h的完全二叉 树最多有多少个结点?最少有 多少个结点?

【信息技术 】用二叉树排序 —树与二叉树 课件 年教科版(2019)高中信息技术选择性必修1

【信息技术 】用二叉树排序 —树与二叉树 课件 年教科版(2019)高中信息技术选择性必修1
(4)该树 5 个分支节点,7 个叶子节 点。 (5)节点H的层数 3 ,树的深度 4 。
(6)节点B的父节点 A 、兄弟节 点 C、D、孩子节点 E、F。



二叉树的基本概念
二叉树是n(n≥0)个节点的有限集合: ① n = 0时,二叉树是一棵空树。。 ② 当n ≠ 0时,二叉树是由一个根节点(N)和两个互不相交的集合被称为
树的基本概念
定义:是n(n>=0)个节点的有限集合 若n=0,称为空树; 若n>0,则它满足如下两个条件; 1)有且仅有一个特定的称为根的节点; 2)其余节点可分为m(m>=0)个互不相交的有限集合
T1,T2,T3.....Tm,其中每一个集合本身又是一棵树,并称为根的子树。
节点A有 三棵子树
节点B有 两棵子树
树与二叉树
A
B
C
D
E
F
G
H
I

树是一种重要的非线性数据结构, 直观的看,它是数据元素(在树中称 之为节点)按分支关系组织起来的结 构,与自然界的树很像。

日常生活中很多事 物可以用树形图来表 示,如家族族谱、动 物分类等,如图所示

日常生活中很多事 物可以用树形图来表 示,如家族族谱、动 物分类等,如图所示
练一练 二
满二叉树
完全二叉树
完全二叉树
非完全二叉树 非完全二叉树
二叉树的基本遍历
对二叉树各个节点进行访问,即是遍历 操作。
1、前序遍历(根 左 右) 先访问根节点,再访问左子树,最
后访问右子树。
如右图的前序遍历顺序为: A-B-C
1A B2 C
二叉树的基本遍历
2、中序遍历(左 根 右) 先访问左子树,再访问根节点,最

第03章 算法与数据结构04树和二叉树2PPT课件

第03章 算法与数据结构04树和二叉树2PPT课件
第六章 树和二叉树
▪ 树的概念和基本术语 ▪ 二叉树 ▪ 二叉树遍历 ▪ 二叉树的计数 ▪ 树与森林

树的概念和基本术语
树的定义
树是由 n (n 0) 个结点的有限集合。如 果 n = 0,称为空树;如果 n > 0,则
▪ 有且仅有一个特定的称之为根(Root)的结 点,它只有直接后继,但没有直接前驱;
▪ 当n > 1,除根以外的其它结点划分为 m (m >0) 个互不相交的有限集 T1, T2 ,…, Tm, 其中每个集合本身又是一棵树,并且称为 根的子树(SubTree)。
例如
A 只有根结点的树
A
BC
D
E F GH I J
KL
M
有13个结点的树
其中:A是根;其余结点分成三个互不相交的子集, T1={B,E,F,K,L}; T2={C,G}; T3={D,H,I,J,M}, T1,T2,T3都是根A的子树,且本身也是一棵树
4 5 67
1
8 9 10 11 12
1
2
3
2
3
45
45
6
非完全二叉树
67
性质4 具有 n (n 0) 个结点的完全二叉树 的深度为log2(n) +1 证明:
设完全二叉树的深度为 h,则根据性 质2和完全二叉树的定义有
2h-1 - 1 < n 2h- 1或 2h-1 n < 2h
取对数 h-1 < log2n h,又h是整数, 因此有 h = log2(n) +1
满二叉树。
1
2
3
45
67
8 9 10 11 12 13 14 15
满二叉树
定义2 完全二叉树 (Complete Binary Tree)

4。1树与二叉树

4。1树与二叉树

数的基本概念
属性:
n个结点的树,有n-1条边
树的高度——总共多少层
结点的度——有几个孩子
树的度——各结点度的最大值
二叉树
二叉数的基本概念
二叉树是n(n≥0)个结点的有限集合:
① n = 0时,二叉树是一棵空树。。
② 当n ≠ 0时,二叉树是由一个根结点和两个互不相交的被称为根的
左子树和右子树组成。左子树和右子树又分别是一棵二叉树。
如果不是完全二叉树,
依然按层序将各节点
顺序存储,结点编号
将无法反映出结点间
的逻辑关系
二叉数的存储结构——顺序存储
二叉数的存储结构——顺序存储
二叉树顺序存储时,当所有
结点只有右孩子时,高度为h
的结点至少需要2ℎ−1 个存储
单元,造成空间浪费
结论:二叉树的顺序存储,
只适合存储完全二叉树
二叉数的存储结构——链式存储
二叉数的特点
①每个结点至多只有两棵子树。
②左右子树不能颠倒(二叉树是有序树)
二叉数的五种状态
特殊的二叉树—满二叉树
满二叉树:每一层的节点数都
达到最大值
特殊的二叉树--完全二叉树
当且仅当其每个结点都与高度
为h的满二叉树中的结点一一对
应时,称为完全二叉树
特点:
①只有最后两层可能有叶子结点
②最多只有一个度为1的结点
树与二叉树

树形逻辑结构的应用
树的基本概念
树是n(n≥0)个结点的有限集合,n = 0时,称为空树,这是一种特殊情况。在任
意一棵非空树中应满足:
1)有且仅有一个特定的结点称为根的结点。
2)当n > 1时,其余结点可分为m(m > 0)个互不相交的有限集合T , T ,…, T ,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

因为 k 只能是整数,因此, k =log2n + 1
.
35
性质 5 :
若对含 n 个结点的完全二叉树从上到下且从
左至右进行 1 至 n 的编号,则对完全二叉树中
任意一个编号为 i 的结点:
(1) 若 i=1,则该结点是二叉树的根,无双亲,
否则,编号为 i/2 的结点为其双亲结点;
(2) 若 2i>n,则该结点无左孩子,
.
28
二叉树的重要特性
.
29
每层的最大结点个数是确定的。
性质 1 :在二叉树的第 i 层上至多有2i-1 个 结点。 (i≥1)
用归纳法证明:
归纳基: i = 1 层时,只有一个根结点:
2i-1 = 20 = 1;
归纳假设:假设对所有的 j,1≤ j i,命题成立; 归纳证明:二叉树上每个结点至多有两棵子树,
两类特殊的二叉树: 1
满二叉树:指的是深 2
3
度为k且含有2k-1个结 4 5 6 7
点的二叉树。
8 9 10 11 12 13 14 15
完全二叉树:树中
a
所含的 n 个结点和 满二叉树中编号为 1 至 n 的结点一一
b de
c fg
对应。
hi j
.
33
完全二叉树的特点:
(1)每个结点i的左子树的深度Lhi-其结点i的右子树的深度 Rhi等于0或1,即叶结点只可能出现在最下层或次最下层。 (2)完全二叉树结点数n满足2k-1-1<n≤2k-1 (3)满二叉树一定是完全二叉树,反之不成立。
InsertChild(&T, &p, i, c)
// 将以c为根的树插入为结点p的第i棵子树
.
10
删除类:
DestroyTree(&T) // 销毁树的结构
DeleteChild(&T, &p, i) // 删除结点p的第i棵子树
.
11
有向树:
(1) 有确定的根; (2) 树根和子树根之间为有向关系。
TreeEmpty(T) // 判定树是否为空树
TreeDepth(T) // 求树的深度
TraverseTree( T, Visit() ) // 遍历
.
9
插入类:
InitTree(&T) // 初始化置空树
CreateTree(&T, definition) // 按定义构造树
Assign(T, cur_e, value) // 给当前结点赋值
祖先结点、子孙结点
结点的层次: 假设根结点的层次为1,第l
层的结点的子树根结点的层
次为l+1
树的深度:树中叶结点所在的最大层次
.
17
森林:
是m(m≥0)棵互 不相交的树的集合
F
root
A
B
C
D
E F GH I J
KL
M
任何一棵非空树是一个二元组
Tree = (root,F)
其中:root 被称为根结点
26
插入类:
InitBiTree(&T); Assign(T, &e, value); CreateBiTree(&T, definition); InsertChild(T, p, LR, c);
.
27
删除类: ClearBiTree(&T); DestroyBiTree(&T); DeleteChild(T, p, LR);
只含根结点
N
右子树为空树 左子树为空树
左右子 树均不 为空树
N
N
N
L
RL
R
.
24
二叉树的主要基本操作: 查找类 插入类 删除类
.
25
查找类:Root(T); Value(T, e); Parent(T, e);
LeftChild(T, e); RightChild(T, e);
LeftSibling(T, e); RightSibling(T, e);
否则,编号为 2i 的结点为其左孩子结点;
(3) 若 2i+1>n,则该结点无右孩子结点,
否则,编号为2i+1 的结点为其右孩子结点。
.
36
主要内容
6.1 树的类型定义 6.2 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历 6.5 线索二叉树 6.6 树和森林 6.7 哈夫曼树及编码
.
21
即:二叉树或为空树,或是由一个
根结点加上两棵分别称为左子树和右
子树的、互不交的二叉树组成。
根结点
A
右子树
B
E
C
F
左子树
D
.
G
H
K
22
二叉树的特点:
⑴ 每个结点最多只有两棵子树,即不存结 点度大于2的结点;
⑵ 子树有左右之分,不能颠倒。
1
2
3
4
1
3
2
4
.
1
2
3
4
23
二叉树的五种基本形态:
空树
struct TriTNode *lchild, *rchild,*parent;
// 左右孩子和双亲指针 } TriTNode, *TriTree;
结点结构: parent lchild data rchild
.
50
3.双亲链表 结点结构:
一、 二叉树的顺序存储
用一组地址连续的存储单元,以层序顺序存 放二叉树的数据元素,结点的相对位置蕴含 着结点之间的关系。
满二叉树 A
B
C
D EF
G
1 2 3 4 5 6 7 8 9 10 11 A B C D E FG 0 0 0 0
• bt[3]的双亲为└3/2┘=1, 即在b t[1]中;
• 其左孩子在bt[2i]=bt[6]中; • 其右孩子在bt[2i+1]=bt[7]中
则第 i 层的结点数 = 2i-2 2 = 2i-1 。
.
30
深度一定,二叉树的最大结点数也是确定的。
性质 2 :深度为 k 的二叉树上至多 含 2k-1 个结点(k≥1)。
证明:
基于上一条性质,深度为 k 的二叉 树上的结点数至多为:
20+21+ +2k-1 = 2k-1
.
31
性质 3 :
T3
7
基本操作: 查找类 插入类 删除类
.
8
查找类:
Root(T) // 求树的根结点
Value(T, cur_e) // 求当前结点的元素值 Parent(T, cur_e) // 求当前结点的双亲结点 LeftChild(T, cur_e) // 求当前结点的最左孩子
RightSibling(T, cur_e) // 求当前结点的右兄弟
.
37
6.3 二叉树的存储结构
一、 顺序存储 二、链式存储
.
38
一、 二叉树的顺序存储
#define MAX_TREE_SIZE 100
// 二叉树的最大结点数
typedef TElemType
SqBiTree[MAX_TREE_SIZE];
// 0号单元存储根结点
SqBiTree bt;
.
39
BiTreeEmpty(T); BiTreeDepth(T);
PreOrderTraverse(T, Visit());
InOrderTraverse(T, Visit());
PostOrderTraverse(T, Visit());
LevelOrderTraverse(T, Visit());
.
第六章
树和二叉树
电子科技大学
LO. GO 吴 跃 教 授
1
主要内容
6.1 树的类型定义 6.2 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历 6.5 线索二叉树 6.6 树和森林 6.7 哈夫曼树及编码
.
2
6.1 树的类型定义
.
3
数据对象 D:
D是具有相同特性的数据元素的集合。
.
14
基本术语
.
15
结点: 数据元素+指向子树的分支
结点的度: 子树的分支个数
树的度: 树中所有结点的度的最大值
D
叶结点: 度为零的结点
HI J
分支结点: 度大于零的结点
M
.
16
(从根到结点的)路径:
A
由从根到该结点
B
C
D
所经分支和结点构成
E F GH I J
孩子结点、双亲结点
KL
M
兄弟结点、堂兄弟
} BiTNode, *BiTree;
结点结构: lchild data rchild
.
48
2.三叉链表 结点结构:
root
parent lchild data rchild
A B
C
D
E
F
.
Байду номын сангаас
49
C 语言的类型描述:
typedef struct TriTNode { // 结点结构 TElemType data;
.
5
树具有下面两个特点: ⑴树的根结点没有前驱结点,除根结点之外的所有结点
有且只有一个前驱结点。 ⑵树中所有结点可以有零或多个后继结点。 下图所示都不是树结构
.
6
表示方法:
A
B
C
D
E
F GH I J
相关文档
最新文档