公开课第六章树和二叉树 掌握其定义、表示方法、基本性质、存储结构
合集下载
数据结构第6章树和二叉树基本概念和二叉树ppt课件
§6.2 二叉树
❖二叉树的定义
问:具有3个结点的二叉树可能有几种不同形态? 普通树呢? 5种/2种
§6.2 二叉树
❖二叉树的抽象数据类型定义
ADT BinaryTree{
数据对象D: D是具有相同特性的数据元素的集合。
数据关系R: 若D=Φ,则R= Φ ;
若D≠Φ,则R= {H};存在二元关系:
第6章 树和二叉树
§6.1 树的基本概念
❖树的逻辑定义
树是由n (n≥0)个结点组成的有限集合T。 在任意一个非空树中:
有且仅有一个特定的结点称为根(root); n > 1时,其余结点可以分为m (m>0) 个互不相交 的有限集T1, T2, T3, …,Tm,其中每一个集合本身又是 一棵树,且称为根的子树。 注意:1.树的定义具有递归性,即树中有树。
§6.2 二叉树
❖二叉树的性质
讨论3:二叉树的叶子数和度为2的结点数之间有关系吗? 性质3: 对于任何一棵二叉树,若2度的结点数有n2个,则叶子数 (n0)必定为n2+1 (即n0=n2+1)
证明: ∵ 二叉树中全部结点数n=n0+n1+n2(叶子数+1度结点数+2度结点数)
又∵ 二叉树中全部结点数n=B+1 (总分支数+根结点 ) (除根结点外,每个结点必有一个直接前趋,即一个分支)
=
方 良
蒋丘
纬 国
=
如 雪
蒋徐
孝 文
=
乃 锦
蒋汪
孝 武
=
长 诗
蒋俞
孝 章
=
扬 和
蒋方
孝 勇
=
智 怡
蒋王
孝 刚
=
倚 惠
第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) 右子树为空
其中 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) 右子树为空
《树和二叉树》课件
《树和二叉树》PPT课件
"树和二叉树"是计算机科学中重要的数据结构。本课件将详细介绍树和二叉树 的概念、存储结构、遍历方式、二叉搜索树、平衡树等内容。让我们一起探 索这个精彩领域吧!
概念介绍
树的定义及特点
树是由节点和边组成的非线性数据结构,具有分层结构和简洁性。
二叉树的定义及特点
二叉树是一种特殊的树,每个节点最多有两个子节点。
二叉搜索树是一种有序二叉树,左子树节点 都小于根节点,右子树节点都大于根节点。
2 插入和删除节点
通过比较节点值,插入或删除符合条件的节 点,保持二叉搜索树的有序性。
3 查找节点
通过比较节点值,快速定位目标节点。
4 遍历
二叉搜索树支持前序、中序和后序遍历。
平衡树
AVL树
AVL树是一种自平衡的二叉搜索树,通过旋转操作 保持树的平衡。
二叉树的遍历方式
1 先序遍历
先访问根节点,然后按先序遍历左子树,再 按先序遍历右子树。
2 中序遍历
先按中序遍历左子树,然后访问根节点,最 后按中序遍历右子树。
3 后序遍历
先按后序遍历左子树,然后按后序遍历右子 树,最后访问根节点。
4 层序遍历
按层级顺序逐层访问二叉树节点。
二叉搜索树
1 定义及性质
二叉树的分类
根据子节点的数量和排列方式,二叉树可分为满二叉树、完全二叉树和平衡二叉树。
树和二叉树的存储结构
双亲链表存储
使用数组存储节点,并在节点 中保存父节点信息。
孩子链表存储
使用链表存储节点,并在节点 中保存子节点信息。
孩子兄弟链表存储
使用链表存储节点,并在节点 中保存第一个孩子节点和下一 个兄弟节点的信息。
"树和二叉树"是计算机科学中重要的数据结构。本课件将详细介绍树和二叉树 的概念、存储结构、遍历方式、二叉搜索树、平衡树等内容。让我们一起探 索这个精彩领域吧!
概念介绍
树的定义及特点
树是由节点和边组成的非线性数据结构,具有分层结构和简洁性。
二叉树的定义及特点
二叉树是一种特殊的树,每个节点最多有两个子节点。
二叉搜索树是一种有序二叉树,左子树节点 都小于根节点,右子树节点都大于根节点。
2 插入和删除节点
通过比较节点值,插入或删除符合条件的节 点,保持二叉搜索树的有序性。
3 查找节点
通过比较节点值,快速定位目标节点。
4 遍历
二叉搜索树支持前序、中序和后序遍历。
平衡树
AVL树
AVL树是一种自平衡的二叉搜索树,通过旋转操作 保持树的平衡。
二叉树的遍历方式
1 先序遍历
先访问根节点,然后按先序遍历左子树,再 按先序遍历右子树。
2 中序遍历
先按中序遍历左子树,然后访问根节点,最 后按中序遍历右子树。
3 后序遍历
先按后序遍历左子树,然后按后序遍历右子 树,最后访问根节点。
4 层序遍历
按层级顺序逐层访问二叉树节点。
二叉搜索树
1 定义及性质
二叉树的分类
根据子节点的数量和排列方式,二叉树可分为满二叉树、完全二叉树和平衡二叉树。
树和二叉树的存储结构
双亲链表存储
使用数组存储节点,并在节点 中保存父节点信息。
孩子链表存储
使用链表存储节点,并在节点 中保存子节点信息。
孩子兄弟链表存储
使用链表存储节点,并在节点 中保存第一个孩子节点和下一 个兄弟节点的信息。
云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK
^d ^ ^ e ^ 三叉链表
3)二叉链表是二叉树最常用的存储结构。还有其它链接方 法,采用何种方法,主要取决于所要实施的各种运算频度。
例:若经常要在二叉树中寻找某结点的双亲时,可在每个结 点上再加一个指向其双亲的指针域parent,称为三叉链表。
lchild data parent rchild
2021/8/16
2021/8/16
9
6.2 二 叉 树
6.2.1 二叉树的概念
一、二叉树的定义: 二叉树(Binary Tree)是n(n>=0)个结点的有限集,它或者是 空集(n=0)或者由一个根结点和两棵互不相交的,分别称 为根的左子树和右子树的二叉树组成。 可以看出,二叉树的定义和树的定义一样,均为递归定 义。
A
集合3
集合1
BCD
EF
G
集合2
2021/8/16
3
2、树的表示方法 1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) )
4)凹入表示法
2021/8/16
A B
D
CG
EF
A B C E DF G
4
3、 树结构的基本术语
1)结点的度(Degree):为该结点的子树的个数。 2)树的度:为该树中结点的最大度数。
7)路径(Path):若树中存在一个结点序列k1,k2,…,kj,使得ki是 ki+1的双亲(1<=i<j),则称该结点序列是从ki到kj一条路径 (Path)
路径长度:路径的长度为j-1,其为该路径所经过的边的数 目。
A
BCD
EF
G
树和二叉树PPT课件
有两归个纳孩基子:结点i =,1则层每时一,层只均有比一上个一根层结的点结,点个数多一
倍。
2i-1 = 20 = 1;
归纳假设:假设对所有的 j,1≤ j i,命题成立;
按照归等纳比证数明列:的二定叉义树,上每每一个项结都点可至以多看有作两是棵相子应树每,一则层第
上的结点个数,i 则层,的a结i=点ai*数qi-1=22i-1i-2 2 = 2i-1 。
Dl,Dr
(3)若Dl , Dr都不为空集,则Dl , Dr本身又是一棵符 合
本定义的二叉树,称为根root的左右子树。
基本操作P:(见教材)
17
} ADT BinaryTree
二叉树的5种基本形态
二叉树的定义
A
A
A
A
B
B
BC
(a)
(b)
(c)
(d)
(e)
空二叉树
根和空的 根和左子树 根和右子树 左右子树
线性表和广义表 栈和队列 数组和广义表
树
……
线性表 广义表
栈
队列 ……
8
树的定义
树的定义
树是由n (n 0)个结点组成的有限集合。 如果n = 0,称为空树; 如果n > 0,则:
有一个特定的称之为根(root)的结点,它只有后继,但没有前
驱;
除根以外的其它结点划分为m(m>0)个互不相交的有限集合T1, T2, …, Tm。
10
树的定义
抽象数据类型树的定义
ADT Tree { 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R:若D为空集,则称为空树; 否则: (1) 在D中存在唯一的称为根的数据元素root, (2) 当n>1时,其余结点可分为m (m>0)个互
数据结构第六章:树和二叉树
性质2:深度为 的二叉树至多有 个结点(k≥ 性质 :深度为k的二叉树至多有2 k 1 个结点 ≥1)
证明:由性质 ,可得深度为k 证明:由性质1,可得深度为 的二叉树最大结点数是
(第i层的最大结点数 ) = ∑ 2 i 1 = 2 k 1 ∑
i =1 i =1
k
k
10
性质3:对任何一棵二叉树 ,如果其终端结点数(即 性质 :对任何一棵二叉树T,如果其终端结点数 即 叶节点)为 度为2的结点数为 的结点数为n 叶节点 为n0,度为 的结点数为 2,则n0=n2+1 证明: 为二叉树 中度为1的结点数 为二叉树T中度为 证明:n1为二叉树 中度为 的结点数 因为:二叉树中所有结点的度均小于或等于2 因为:二叉树中所有结点的度均小于或等于 所以:其结点总数n=n0+n1+n2 所以:其结点总数 又二叉树中,除根结点外, 又二叉树中,除根结点外,其余结点都只有一个 分支进入; 分支进入; 为分支总数, 设B为分支总数,则n=B+1 为分支总数 又:分支由度为1和度为 的结点射出,∴B=n1+2n2 分支由度为 和度为2的结点射出, 和度为 的结点射出 于是, 于是,n=B+1=n1+2n2+1=n0+n1+n2 ∴n0=n2+1
7
结点A的度:3 结点 的度: 的度 结点B的度:2 结点 的度: 的度 结点M的度:0 结点 的度: 的度 结点A的孩子: , , 结点 的孩子:B,C,D 的孩子 结点B的孩子 的孩子: , 结点 的孩子:E,F 树的度: 树的度:3 E K 结点A的层次: 结点 的层次:1 的层次 结点M的层次 的层次: 结点 的层次:4 L B F A C G H M
第六章树与二叉树教案 二叉树的类型定义 存储结构 遍历 哈夫曼树与哈夫曼编码
或 2k-1 ≤ n < 2k
即 k-1 ≤ log2 n < k
因为 k 只能是整数,因此, k =log2n + 1
问题:
一棵含有n个结点的二叉树,可能达 到的最大深度和最小深度各是多少?
1
答:最大n,
2
最小[log2n] + 1
第六章 树和二叉树教案
二叉树的类型定义 存储结构 遍历 哈夫曼树与哈夫曼编码
树是常用的数据结构
•家族 •各种组织结构 •操作系统中的文件管理 •编译原理中的源程序语法结构 •信息系统管理 •。。。。
2
6.1 树的类型定义 6.2 二叉树的类型定义
6.2.3 二叉树的存储结构 6.3 二叉树的遍历
二叉树上每个结点至多有两棵子树, 则第 i 层的结点数 = 2i-2 2 = 2i-1 。
性质 2 :
深度为 k 的二叉树上至多含 2k-1 个 结点(k≥1)。
证明:
基于上一条性质,深度为 k 的二叉
树上的结点数至多为
20+21+ +2k-1 = 2k-1 。
(等比数列求和)
k
k
(第i层的最大结点数) 2i1 2k
i 1
i 1
性质 3 :
对任何一棵二叉树,若它含有n0 个叶 子结点(0度节点)、n2 个度为 2 的结 点,则必存在关系式:n0 = n2+1。
证明:
设 二叉树上结点总数 n = n0 + n1 + n2 又 二叉树上分支总数 b = n1+2n2
而 b = n-1 = n0 + n1 + n2 - 1 由此, n0 = n2 + 1 。
即 k-1 ≤ log2 n < k
因为 k 只能是整数,因此, k =log2n + 1
问题:
一棵含有n个结点的二叉树,可能达 到的最大深度和最小深度各是多少?
1
答:最大n,
2
最小[log2n] + 1
第六章 树和二叉树教案
二叉树的类型定义 存储结构 遍历 哈夫曼树与哈夫曼编码
树是常用的数据结构
•家族 •各种组织结构 •操作系统中的文件管理 •编译原理中的源程序语法结构 •信息系统管理 •。。。。
2
6.1 树的类型定义 6.2 二叉树的类型定义
6.2.3 二叉树的存储结构 6.3 二叉树的遍历
二叉树上每个结点至多有两棵子树, 则第 i 层的结点数 = 2i-2 2 = 2i-1 。
性质 2 :
深度为 k 的二叉树上至多含 2k-1 个 结点(k≥1)。
证明:
基于上一条性质,深度为 k 的二叉
树上的结点数至多为
20+21+ +2k-1 = 2k-1 。
(等比数列求和)
k
k
(第i层的最大结点数) 2i1 2k
i 1
i 1
性质 3 :
对任何一棵二叉树,若它含有n0 个叶 子结点(0度节点)、n2 个度为 2 的结 点,则必存在关系式:n0 = n2+1。
证明:
设 二叉树上结点总数 n = n0 + n1 + n2 又 二叉树上分支总数 b = n1+2n2
而 b = n-1 = n0 + n1 + n2 - 1 由此, n0 = n2 + 1 。
第6章树与二叉树-
证明:
(1) 设 n1 为二叉树 T 中度为 1 的结点数。n 为二叉树 中总结点数。因为二叉树中所有结点的度均小于或等于 2, 则:n = n0 + n1 + n2 。
(2) 设 B 为二叉树 T 中的分支总数。 从入支的角度看,二叉树中除了根结点外,其余结
点都有一个且仅有一个入支,则:n = B + 1。 从出支的角度看,度为 1 的结点只有一个出支,度
操作也很方便。14ຫໍສະໝຸດ R∧A∧D∧B
∧E∧
C∧
F∧
∧G
∧H
∧K∧
15
6.2 二叉树
二叉树 (binary tree) 是另一种树型结构,它的特点 是每个结点至多只有两棵子树(即二叉树中不存在度大 于 2 的结点),并且,二叉树的子树有左右之分,其次 序不能任意颠倒。
二叉树的逻辑结构 二叉树的基本性质 二叉树的存储结构
操中点作从(,头根直到结到点尾遇除扫见外描无)一双只遍亲 D的T有.p结a惟r点e一En时t双,域亲即,的TT性..pFp质aarr。eenntt =
-61的时结,点便G找、到H了、惟K 一就的是 无结双点亲F的的根G孩结子点。。H K
数组下标 双亲存储结构
0
R -1
1
A0
2
B0
3
C0
4
D1
5
E1
6
data child1 child2 …… childd
其中 d 为树的度。由于树中很多结点的度都小于 d, 所以链表中有很多空链域,空间比较浪费。
设树的度为 k,结点数为 n。若采用同构结点格式, 每个结点具有 k 个固定链域,那么共有 nk 个链域。由 于 n 个结点要有 ( n - 1) 个枝相连,而每枝需要 1 个链 域。因此,这棵树的空链域的个树为: n ( k – 1 ) +1。
(1) 设 n1 为二叉树 T 中度为 1 的结点数。n 为二叉树 中总结点数。因为二叉树中所有结点的度均小于或等于 2, 则:n = n0 + n1 + n2 。
(2) 设 B 为二叉树 T 中的分支总数。 从入支的角度看,二叉树中除了根结点外,其余结
点都有一个且仅有一个入支,则:n = B + 1。 从出支的角度看,度为 1 的结点只有一个出支,度
操作也很方便。14ຫໍສະໝຸດ R∧A∧D∧B
∧E∧
C∧
F∧
∧G
∧H
∧K∧
15
6.2 二叉树
二叉树 (binary tree) 是另一种树型结构,它的特点 是每个结点至多只有两棵子树(即二叉树中不存在度大 于 2 的结点),并且,二叉树的子树有左右之分,其次 序不能任意颠倒。
二叉树的逻辑结构 二叉树的基本性质 二叉树的存储结构
操中点作从(,头根直到结到点尾遇除扫见外描无)一双只遍亲 D的T有.p结a惟r点e一En时t双,域亲即,的TT性..pFp质aarr。eenntt =
-61的时结,点便G找、到H了、惟K 一就的是 无结双点亲F的的根G孩结子点。。H K
数组下标 双亲存储结构
0
R -1
1
A0
2
B0
3
C0
4
D1
5
E1
6
data child1 child2 …… childd
其中 d 为树的度。由于树中很多结点的度都小于 d, 所以链表中有很多空链域,空间比较浪费。
设树的度为 k,结点数为 n。若采用同构结点格式, 每个结点具有 k 个固定链域,那么共有 nk 个链域。由 于 n 个结点要有 ( n - 1) 个枝相连,而每枝需要 1 个链 域。因此,这棵树的空链域的个树为: n ( k – 1 ) +1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多个后继)
数据对象 D:
D是具有相同特性的数据元素的集合。
数据关系 R:
若D为空集,则称为空树 。 否则: (1) 在D中存在唯一的称为根的数据元素root; (2) 当n>1时,其余结点可分为m (m>0)个互
不相交的有限集T1, T2, …, Tm,其中每一 棵子集本身又是一棵符合本定义的树, 称为根root的子树。
插入类:
InitTree(&T) // 初始化置空树
CreateTree(&T, definition) // 按定义构造树
Assign(T, cur_e, value) // 给当前结点赋值
InsertChild(&T, &p, i, c) // 将以c为根的树插入为结点p的第i棵子树
删除类:
E
F
G
H
学校的行政关系、书的层次结构、人类的家族血缘关
系等。 树形结构 —— 结点间具有分层次的连接关系
对比树型结构和线性结构 的结构特点
线性结构
第一个数据元素 (无前驱)
最后一个数据元素 (无后继)
其它数据元素 (一个前驱、
一个后继)
树型结构
根结点 (无前驱)
多个叶子结点 (无后继)
其它数据元素 (一个前驱、
2020/8/20
8
A
B
C
D
E
F GH I
J
树的定义
树的递归定义的各子树T1,T2,…,Tm的相对 次序是重要的,即树是有序的。
2020/8/20
9
树定义(图示)
A
2020/8/20
A
B
C
E
F
G
H
KL
M
T1
10
T2
D
I
J
T3
树形结构
全校学生档案管理的组织方式
A
D
B
C
E F GH
A
B
C
D
现实世界中,能用树的结构表示的例子:
A
B
C
D
E F GH I J
KL
M
树的常见表示方法
1.直观表示法
用圆圈表示结点,元素写在圆圈中, 连线表示元素之间的关系,根在上, 叶子在下(即树向下生长)
A
B
C
D
E F GH I J
KL
M
树的常见表示方法
2.集合表示法
根据树的集合定义,写出集合划分。
孩子,双亲,兄弟,堂兄:结点的子树的根称为该 结点的孩子;该结点称为孩子的双亲;同一个双亲 的孩子之间互称兄弟;其父结点是兄弟的结点互称 堂兄。
2020/8/20
5
概念 祖先:从根结点到该结点所经分支上的所有结点。
子孙:以某结点为根的子树中的任一结点都称为该 结点的子孙。
层次:结点在树结构中的层(一般定义根为1层)。 深度:树中结点的最大层次称为树的深度。
有序树:
子树之间存在确定的次序关系。
无序树:
子树之间不存在确定的次序关系。
森林:
是m(m≥0)棵互 不相交的树的集合
F
root
A
B
C
D
E F GH I J
KL
M
任何一棵非空树是一个二元组 Tree = (root,F)
其中:root 被称为根结点 F 被称为子树森林
注意:
1.根没有双亲,叶子没有孩子 2.堂兄弟的双亲是兄弟关系吗 ?
基本操作: 查找类 插入类 删除类
查找类:
Root(T) // 求树的根结点 Value(T, cur_e) // 求当前结点的元素值 Parent(T, cur_e) // 求当前结点的双亲结点 LeftChild(T, cur_e) // 求当前结点的最左孩子 RightSibling(T, cur_e) // 求当前结点的右兄弟 TreeEmpty(T) // 判定树是否为空树 TreeDepth(T) // 求树的深度 TraverseTree( T, Visit() ) // 遍历
M
内部结点: 除根之外的分支结点
孩子结点: 结点的子树的根称为该结 点的孩子(后继)
双亲结点:
一个结点是它各子树的根 结点的双亲(前驱)D
HI J
兄弟结点: 具有相同双亲的结点
M
祖先: 从根结点到该结点路径上所有 结点都称为该结点的祖先。
子孙: 该结点所有子树上的结点都 称为该结点的子孙
D
HI J
ClearTree(&T) // 将树清空 DestroyTree(&T) // 销毁树的结构
DeleteChild(&T, &p, i) // 删除结点p的第i棵子树
基本术语
结点: 树中的一个数据元素
结点的度: 分支的个数
树的度: 树中所有结点的度的最大值
叶子结点: 度为零的结点
D
HI J
分支结点: 度大于零的结点
M
(从根到结点的)路径:
A
B
C
D
由从根到该结点 E 所经分支和结点构成
F GH I J
KL
M
结点的层次: 根结点定义为第1层,根的
儿子定义为第2层,以此类 推,记作L(v)
树的深度: 树中叶子结点所在的最大层次
堂兄弟: 双亲在同一层上的结点
有向树:
(1) 有确定的根; (2) 树根和子树根之间为有向关系。
公开课第六章
树和二叉树
掌握其定义、表示方法、 基本性质、存储结构
学习目标
掌握树的定义、表示方法、基本 性质、存储结构和遍历算法;
掌握二叉树的定义、基本性质、 存储结构、和各种运算。
概念示例
结点
结点的度(Degree) 叶子(Leaf)或终端结点
树的示例
分支结点或非终端结点
树的度 层次(Level) 树的深度(Depth)
A
B
C
D
孩子(child) 双亲(Parent)
E
F
G
H
I
J
兄弟(Sibling)
K
L
M
祖先
子孙 2020/8/20
4
树的概念
结点:一个数据元素及若干指向其子树的分支;
结点的度:结点拥有的子树的数目。
树的度:树内各结点的度的最大值;
叶子(终端结点):度为0的结点; 分支结点(非终端结点):度不为0的结点;除根 结点外,也称内部结点;
有序树:结点的子树在树中的位置固定,不能互换, 称有序树。
无序树:子树在树中的位置可以互换。 树的度:结点度的最大值
森林:m(m≥0)棵互不相交的树的.1 树的类型定义 6.2 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历 6.5 线索二叉树 6.6 树和森林的表示方法 6.7 树和森林的遍历 6.8 哈夫曼树与哈夫曼编码
树的定义 树(Tree)是n(n>=0)个结 点 的 有 限 集 。 n=0 时 称 为空树。
(注:有人定义树不能为空)
有且仅有一个称为根的 结点(Root);
n>1时,其余结点可分为 m(m>0) 个 互 不 相 交 的 有 限集T1,T2,…,Tm,其中每 个集合又是一棵树,称 为子树(SubTree)
数据对象 D:
D是具有相同特性的数据元素的集合。
数据关系 R:
若D为空集,则称为空树 。 否则: (1) 在D中存在唯一的称为根的数据元素root; (2) 当n>1时,其余结点可分为m (m>0)个互
不相交的有限集T1, T2, …, Tm,其中每一 棵子集本身又是一棵符合本定义的树, 称为根root的子树。
插入类:
InitTree(&T) // 初始化置空树
CreateTree(&T, definition) // 按定义构造树
Assign(T, cur_e, value) // 给当前结点赋值
InsertChild(&T, &p, i, c) // 将以c为根的树插入为结点p的第i棵子树
删除类:
E
F
G
H
学校的行政关系、书的层次结构、人类的家族血缘关
系等。 树形结构 —— 结点间具有分层次的连接关系
对比树型结构和线性结构 的结构特点
线性结构
第一个数据元素 (无前驱)
最后一个数据元素 (无后继)
其它数据元素 (一个前驱、
一个后继)
树型结构
根结点 (无前驱)
多个叶子结点 (无后继)
其它数据元素 (一个前驱、
2020/8/20
8
A
B
C
D
E
F GH I
J
树的定义
树的递归定义的各子树T1,T2,…,Tm的相对 次序是重要的,即树是有序的。
2020/8/20
9
树定义(图示)
A
2020/8/20
A
B
C
E
F
G
H
KL
M
T1
10
T2
D
I
J
T3
树形结构
全校学生档案管理的组织方式
A
D
B
C
E F GH
A
B
C
D
现实世界中,能用树的结构表示的例子:
A
B
C
D
E F GH I J
KL
M
树的常见表示方法
1.直观表示法
用圆圈表示结点,元素写在圆圈中, 连线表示元素之间的关系,根在上, 叶子在下(即树向下生长)
A
B
C
D
E F GH I J
KL
M
树的常见表示方法
2.集合表示法
根据树的集合定义,写出集合划分。
孩子,双亲,兄弟,堂兄:结点的子树的根称为该 结点的孩子;该结点称为孩子的双亲;同一个双亲 的孩子之间互称兄弟;其父结点是兄弟的结点互称 堂兄。
2020/8/20
5
概念 祖先:从根结点到该结点所经分支上的所有结点。
子孙:以某结点为根的子树中的任一结点都称为该 结点的子孙。
层次:结点在树结构中的层(一般定义根为1层)。 深度:树中结点的最大层次称为树的深度。
有序树:
子树之间存在确定的次序关系。
无序树:
子树之间不存在确定的次序关系。
森林:
是m(m≥0)棵互 不相交的树的集合
F
root
A
B
C
D
E F GH I J
KL
M
任何一棵非空树是一个二元组 Tree = (root,F)
其中:root 被称为根结点 F 被称为子树森林
注意:
1.根没有双亲,叶子没有孩子 2.堂兄弟的双亲是兄弟关系吗 ?
基本操作: 查找类 插入类 删除类
查找类:
Root(T) // 求树的根结点 Value(T, cur_e) // 求当前结点的元素值 Parent(T, cur_e) // 求当前结点的双亲结点 LeftChild(T, cur_e) // 求当前结点的最左孩子 RightSibling(T, cur_e) // 求当前结点的右兄弟 TreeEmpty(T) // 判定树是否为空树 TreeDepth(T) // 求树的深度 TraverseTree( T, Visit() ) // 遍历
M
内部结点: 除根之外的分支结点
孩子结点: 结点的子树的根称为该结 点的孩子(后继)
双亲结点:
一个结点是它各子树的根 结点的双亲(前驱)D
HI J
兄弟结点: 具有相同双亲的结点
M
祖先: 从根结点到该结点路径上所有 结点都称为该结点的祖先。
子孙: 该结点所有子树上的结点都 称为该结点的子孙
D
HI J
ClearTree(&T) // 将树清空 DestroyTree(&T) // 销毁树的结构
DeleteChild(&T, &p, i) // 删除结点p的第i棵子树
基本术语
结点: 树中的一个数据元素
结点的度: 分支的个数
树的度: 树中所有结点的度的最大值
叶子结点: 度为零的结点
D
HI J
分支结点: 度大于零的结点
M
(从根到结点的)路径:
A
B
C
D
由从根到该结点 E 所经分支和结点构成
F GH I J
KL
M
结点的层次: 根结点定义为第1层,根的
儿子定义为第2层,以此类 推,记作L(v)
树的深度: 树中叶子结点所在的最大层次
堂兄弟: 双亲在同一层上的结点
有向树:
(1) 有确定的根; (2) 树根和子树根之间为有向关系。
公开课第六章
树和二叉树
掌握其定义、表示方法、 基本性质、存储结构
学习目标
掌握树的定义、表示方法、基本 性质、存储结构和遍历算法;
掌握二叉树的定义、基本性质、 存储结构、和各种运算。
概念示例
结点
结点的度(Degree) 叶子(Leaf)或终端结点
树的示例
分支结点或非终端结点
树的度 层次(Level) 树的深度(Depth)
A
B
C
D
孩子(child) 双亲(Parent)
E
F
G
H
I
J
兄弟(Sibling)
K
L
M
祖先
子孙 2020/8/20
4
树的概念
结点:一个数据元素及若干指向其子树的分支;
结点的度:结点拥有的子树的数目。
树的度:树内各结点的度的最大值;
叶子(终端结点):度为0的结点; 分支结点(非终端结点):度不为0的结点;除根 结点外,也称内部结点;
有序树:结点的子树在树中的位置固定,不能互换, 称有序树。
无序树:子树在树中的位置可以互换。 树的度:结点度的最大值
森林:m(m≥0)棵互不相交的树的.1 树的类型定义 6.2 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历 6.5 线索二叉树 6.6 树和森林的表示方法 6.7 树和森林的遍历 6.8 哈夫曼树与哈夫曼编码
树的定义 树(Tree)是n(n>=0)个结 点 的 有 限 集 。 n=0 时 称 为空树。
(注:有人定义树不能为空)
有且仅有一个称为根的 结点(Root);
n>1时,其余结点可分为 m(m>0) 个 互 不 相 交 的 有 限集T1,T2,…,Tm,其中每 个集合又是一棵树,称 为子树(SubTree)