数据结构 2015版(严)

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

练习
树和二叉树
一棵完全二叉树有1000个结点,则它必有 个 叶子结点,有 个度为2的结点,有 个 结点只有非空左子树,有 个结点只有非空右 子树。
正确答案: 全部叶子数=1000/2 =500个。 500 度为2的结点=叶子总数-1=499个。 因为最后一个结点坐标是偶数,所以必为左子树。有 1 个结点只 有非空左子树,有 0 个结点只有非空右子树。
树和二叉树
6.1.4 树的几种表示方法
图形表示法 嵌套集合表示法 广义表表示法 凹入表示法 左孩子-右兄弟表示法
图形表示法 湖北师范学院 根
树和二叉树
电信系
计算机系 自控系 ……
……
教师
学生
其他人员
2004级 叶子 子树
2001级 2002级 2003级
树和二叉树
嵌套集合表示法
B E L
D I J
6.1 树的定义和基本术语
6.1.2 树的基本术语
树和二叉树
• 结点(node)——表示树中的元素,包括数据项及若干指向其 子树的分支 • 结点的度(degree)——结点拥有的子树数 • 叶子(leaf)——度为0的结点 • 孩子(child)——结点子树的根称为该结点的孩子 • 双亲(parents)——孩子结点的上层结点叫该结点的~ • 兄弟(sibling)——同一双亲的孩子 • 树的度——一棵树中最大的结点度数(Max{各结点的度}) • 结点的层次(level)——从根结点算起,根为第一层,它的孩 子为第二层…… • 深度(depth)——树中结点的最大层次数(Max{各结点的层次}) • 森林(forest)——m(m0)棵互不相交的树的集合
6.2 二叉树
6.2.2 二叉树的性质
树和二叉树
性质2:深度为k的二叉树至多有2k-1个结点(k ≥1)。 [证]由性质1,可得深度为k的二叉树最大结点数是
i 1 k ( 第 i 层的最大结点数 ) 2 2 1 i 1 i 1 k k
证毕。
6.2 二叉树
6.2.2 二叉树的性质
6.2 二叉树
6.2.3 二叉树的存储结构 一、顺序存储结构
●完全二叉树的存储示例
树和二叉树
1 2 3 5 6 7
4 8
bt(1:12)
9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
i 2
i
2i
2i+1
6.2 二叉树
6.2.3 二叉树的存储结构 一、顺序存储结构
树和二叉树
广义表表示法
( A ( B ( E ( K, L ), F ), C ( G ), D ( H ( M ), I, J ) ) 约定: 根作为由子树森林组成的表的名字写在表的左边
树和二叉树
凹入表示法
又称目录表示法
树和二叉树
树结点的结构:
data
link 1 link 2 ...
...
示例 如右图,对于n=8,9,10,···,14的
完全二叉树,以及n=15的满二叉树,均有: k= log2n+1 =3+1=4.
2
3
4
5
6
7
8 9 10 11 12
6.2 二叉树
6.2.2 二叉树的性质
树和二叉树
● 性质5:如果对一棵有n个结点的完全二叉树(其深度 为 log2n+1 )的结点按层序编号(从第1层到第 log2n+1层,每层从左到右),则对任一结点 i(1 ≤ i≤n),有: (1) 如果 i=1,则结点i是二叉树的根,无双亲;如果
图6.4 特殊形态的二叉树
树和二叉树
1 2 5 7 1 2 5 3 6 3
6.2 二叉树
树和二叉树
6.2.2 二叉树的性质 ● 性质4:具有n个结点的满二叉树或完全二叉树的深度 为log2n+1. [证]
对于满二叉树,n=2k-1,或n+1=2k,得k=log2(n+1). 由于k是 整数,故log2n+1 符号含义: 对于完全二叉树,根据性质2和完全二叉树的定义知 x 表示不大于x的最大整数。 k-1 2k-1-1<n≤2 表示不小于 x的最小整数。 其中2k-1-1与2k-1分别表示深度为k-1与k的最大结点数。于是 例如:5.8 5.8 或有 k-1≤log = 5 2k-1 ≤ n<2k 2n<k 1 = 6 由于k是整数,故k= log2n+1。证毕。
A C F G H M D I
B E K L
J
树的深度:4
结点F,G为堂兄弟 结点A是结点F,G的祖先
图6.2 树的基本术语示例
6.1 树的定义和基本术语
6.1.3 树的抽象数据类型
树和二叉树
数据集合: 树的结点集合,每个结点由数据元素和构造数 据元素之间关系的指针组成。 操作集合: (1)创建树 CreateTree(T) (2)撤消树 DestroyTree(&T) (3)查找树中当前结点的双亲结点 Parent(T,curr) (4)查找树中当前结点的左孩子结点 LeftChild(T,curr) (5)查找树中当前结点的右孩子结点 RightSibling(T,curr) (6)遍历树 Traverse(T,Visit( ))
树和二叉树
问题:对于一般的二叉树如何存储呢?
●非完全二叉树的存储示例
1 3 5 6 7
6 7
2 4
一般二叉树也 必须以完全二 叉树的形式来 确定。无结点 的补0,造成了 存储空间的浪 费。
bt(1:11)
1 2 3 4 5 0 0 0 0
(0表示不存在此结点)
6.2 二叉树
6.2.3 二叉树的存储结构 一、顺序存储结构
link n
困惑:构造树的结点时 应当开多少个链域?
树和二叉树
左孩子-右兄弟表示法
A B C D
E
F
G
H
I
J
data 右兄弟 左孩子
K
L
M
多叉树转为 了二叉树
6.2 二叉树
树和二叉树
为何要重点研究结点最多只有两个 “叉” 的树?
● 二叉树的结构最简单,规律性最强; ● 可以证明,所有树都能转为唯一对应的二叉树, 不失一般性。
6.2 二叉树
6.2.1 二叉树的定义
树和二叉树
● 定义: 二叉树是n(n0)个结点的有限集,它或为空树 (n=0),或由一个根结点和两棵分别称为左子树和 右子树的互不相交的二叉树构成。 ● 特点: 1)每个结点至多有二棵子树(即不存在度大于2 的结点)。 2)二叉树的子树有左、右之分,且其次序不能 任意颠倒。
6.1 树的定义和基本术语
6.1.1 树的定义 ● 定义:
树和二叉树
树(tree)是n(n>0)个结点的有限集T,其中: 1)有且仅有一个特定的结点,称为树的根(root) 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集 T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根 的子树(subtree)。
6.1 树的定义和基本术语
● 树的定义
树和二叉树
树的逻辑结构——它定义一类重要的非线性结构。树结 构在计算机科学的很多领域都得到了广泛的应用。 树结构可应用于诸如 编译程序中表示源程序的语法结构 数据库系统中的信息组织 文件目录 电路分析 社会各个组织和管理机构 家谱 书的章节编目 军队编制 树型结构是结点之间有分支、层次关系的结构,它非常 类似于自然界中的树。树型结构在客观世界中大量存在。
● 特点: 1)树中至少有一个结点——根。 2)树中各子树是互不相交的集合。 注1:树的定义具有递归性,即“树中还有树”。
6.1 树的定义和基本术语
6.1.1 树的定义
有子树的树 只有根结点的树 A K
(a) 只有根结点的树 图6.1 树的示例
树和二叉树
A C F G H M
(b) 一般的树

●非完全二叉树的存储示例 最坏情况:
树和二叉树
1 2 3 4
bt(1:15)
1 0 2 0 0 0 3 0 0 0 0 0 0 0 4 (0表示不存在此结点)
6.2 二叉树
6.2.3 二叉树的存储结构 二、链式存储结构 ● 二叉链表
typedef struct BiTNode A { TElemType data; struct BiTNode *lchild; B struct BiTNode *rchild; } BiTNode,*BiTree; C D lchild data rchild E G F
树和二叉树
性质3:非空二叉树T的叶结点数等于度为2的结点数加1 (即n0=n2+1)
证明: ∵ 二叉树中全部结点数n=n0+n1+n2(叶子数+1度结点数+2度结点数) 又∵二叉树中全部结点数n=B+1 ( 总分支数+根结点 ) (除根结点外,每个结点必有一个直接前趋,即一个分支) 而 总分支数B= n1+2n2 (1度结点必有1个直接后继,2度结点必有2个) 三式联立可得: n0+n1+n2= n1+2n2 +1, 即n0=n2+1
6.1 树的定义和基本术语
6.1.2 树的基本术语
结点A的度:3 结点B的度:2 结点M的度:0 结点A的孩子:B,C,D 结点B的孩子:E,F 树的度:3 结点A的层次:1 结点M的层次:4
树和二叉树
叶子:K,L,F,G,M,I,J 结点I的双亲:D 结点L的双亲:E 结点B,C,D为兄弟 结点K,L为兄弟
6.2 二叉树
6.2.2 二叉树的性质
树和二叉树
● 满二叉树:一棵深度为k且具有2k-1个结点的二叉树称为满二叉 树。简单的理解,每一层必满。
●完全二叉树:深度为k有n个结点的二叉树,当且仅当该二叉树的 n个结点与深度为k的满二叉树中编号从1至n的结点位置一一对应时, 则称为完全二叉树。 ●完全二叉树(另一种定义):深度为k的完全二叉树,其k-1层是 一棵满二叉树,最后第k层结点都尽量排在靠左的位置上(即第k层 的所有叶子结点占据树的最左边的连续位置)。
6.2 二叉树
●满二叉树与完全二叉树的区别?
树和二叉树
满二叉树是叶子一个也不少的树,而完全二叉树虽然前k-1层是满 的,但最底层却允许在右边缺少连续若干个结点。满二叉树是完全 二叉树的一个特例。
●为何要研究这两种特殊形式? 因为它们在顺序存储方式下可以复原。
6.2 二叉树
6.2.2 二叉树的性质 ● 判断是满二叉树还是完全二叉树? 1 2 3 4 8 5 6 7 4 6 9 10 11 12 13 14 15 1 2 4 5 6 8 9 10 11 12 3 7 4
6.2 二叉树
6.2.3 二叉树的存储结构 一、顺序存储结构
树和二叉树
使用一组连续的存储单元(向量,即一维数组) 来存储二叉树的数据元素。 ● 实现: 按满二叉树的结点层次编号,依次存放二叉树 中的数据元素。 ● 特点: 1)结点间关系蕴含在其存储位置中。 2)浪费空间,适于存满二叉树和完全二叉树。
树和二叉树
第6章 树和二叉树
计算机科学与技术学院 主讲:孙玉霞
树和二叉树
目 录
6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用
树和二叉树
●基本要求: 1)理解并准确叙述树、二叉树、森林及其有关概念并 熟悉它们的基本性质; 2)熟悉树形结构的存储结构和中序线索二叉树; 3)熟悉树的遍历方法,尤其是二叉树的前序、中序和 后序遍历的递归与应用,知道树形结构的若干应用。 ●学习重点: 1)二叉树的性质与存储结构; 2)二叉树的遍历算法。
i>1,则其双亲Parent(i)是 i/2 (2) 如果 2 *i>n。则结点i无左孩子(结点i为叶子结点 );如果 2i ≤n,则其左孩子LChild(i)是结点2i; (3) 如果 2i+1>n,则结点i无右孩子(但i不一定是叶结 点);如果 2i+1 ≤n,则Baidu Nhomakorabea右孩子RChild(i)是结点2i+1。
6.2 二叉树
6.2.1 二叉树的定义 ● 基本形态:二叉树有5种基本形态。
树和二叉树

A B
A
A B
左子树为空
A B C
左、右子树 均非空
空二叉树
只有根结点 的二叉树
右子树为空
图6.3 树的5种基本形态
6.2 二叉树
6.2.2 二叉树的性质
树和二叉树
性质1:在二叉树的第i层上至多有2i-1个结点(i≥1)。 [证]用归纳法。 1)i=1,只有一个根结点。2i-1=20=1。正确。 2)设命题对j成立,即有第j层上至多有2j-1个结 点。由于二叉树每个结点的度至多为2,故第i层上最 大结点数是第i-1层的2倍,即2j-1.2=2j=2(j+1)-1。故命 题对j+1亦成立。 证毕。
相关文档
最新文档