数据结构严蔚敏6汇编

上传人:我** 文档编号:114772668 上传时间:2019-11-12 格式:PPT 页数:49 大小:409.50KB
返回 下载 相关 举报
数据结构严蔚敏6汇编_第1页
第1页 / 共49页
数据结构严蔚敏6汇编_第2页
第2页 / 共49页
数据结构严蔚敏6汇编_第3页
第3页 / 共49页
数据结构严蔚敏6汇编_第4页
第4页 / 共49页
数据结构严蔚敏6汇编_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《数据结构严蔚敏6汇编》由会员分享,可在线阅读,更多相关《数据结构严蔚敏6汇编(49页珍藏版)》请在金锄头文库上搜索。

1、1,第六章 树和二叉树,2,6.1 树的类型定义,6.2 二叉树的类型定义,6.3 二叉树的存储结构,6.4 二叉树的遍历,6.8 哈夫曼树与哈夫曼编码,3,6.1 树的类型定义,4,数据对象 D:,D是具有相同特性的数据元素的集合。,若D为空集,则称为空树 。 否则: (1) 在D中存在唯一的称为根的数据元素root; (2) 当n1时,其余结点可分为m (m0)个互 不相交的有限集T1, T2, , Tm,其中每一 棵子集本身又是一棵符合本定义的树, 称为根root的子树。,数据关系 R:,5,A,B,C,D,E,F,G,H,I,J,M,K,L,A( B(E, F(K, L), C(G),

2、 D(H, I, J(M) ),T1,T3,T2,树根,例如:,6,基 本 术 语,7,结点:,结点的度:,树的度:,叶子结点:,分支结点:,数据元素+若干指向子树的分支,分支的个数,树中所有结点的度的最大值,度为零的结点,度大于零的结点,D,H,I,J,M,8,(从根到结点的)路径:,孩子结点:一个结点的后继称为该结点的孩子结点。,双亲结点:,由从根到该结点所经分支和结点构成,A,B,C,D,E,F,G,H,I,J,M,K,L,一个结点称其为其后继结点的双亲结点。,兄弟结点:同一双亲结点下的孩子结点互 称为兄弟结点。 堂兄弟:双亲互为兄弟的两个结点互称 为堂兄弟。,9,祖先结点 :,子孙结点

3、:一个结点的所有子树中的结点称之为该结点的子孙结点。,A,B,C,D,E,F,G,H,I,J,M,K,L,从树根结点到达一个结点的路径上的所有结点称为该结点的祖先结点,结点的层次:假设树的根结点的层次为 1,第l层的结点的子树根 结点的层次为l1 树的深度:树中结点的最大层次称为树 的深度(或高度),10,任何一棵非空树是一个二元组 Tree = (root,F) 其中:root 被称为根结点 F 被称为子树森林,森林:,是m(m0)棵互 不相交的树的集合,A,root,B,C,D,E,F,G,H,I,J,M,K,L,F,11,() 有确定的根; () 树根和子树根之间为有向关系。,有向树:,

4、有序树:,子树之间存在确定的次序关系。,无序树:,子树之间不存在确定的次序关系。,12,A,B,C,D,E,F,G,H,I,J,M,K,L,例如:,13,6.2 二叉树的类型定义,14,二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。,A,B,C,D,E,F,G,H,K,根结点,左子树,右子树,15,二叉树的五种基本形态:,N,空树,只含根结点,N,N,N,L,R,R,右子树为空树,L,左子树为空树,左右子树均不为空树,16,二叉树的主要基本操作:,查 找 类,插 入 类,删 除 类,17,二叉树 的重要特性,18,两类特殊的二叉树:,满二叉树:指的是深度

5、为k且含有2k-1个结点的二叉树。,完全二叉树:树中所含的 n 个结点和满二叉树中编号为 1 至 n 的结点一一对应。,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,a,b,c,d,e,f,g,h,i,j,19,性质 5 :,若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点: (1) 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 i/2 的结点为其双亲结点; (2) 若 2in,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点; (3) 若 2i+1n,则该结点无右孩子结点,

6、否则,编号为2i+1 的结点为其右孩子结点。,20,6.3 二叉树的存储结构,二、二叉树的链式 存储表示,一、 二叉树的顺序 存储表示,21,#define MAX_TREE_SIZE 100 / 二叉树的最大结点数 typedef TElemType SqBiTreeMAX_ TREE_SIZE; / 0号单元存储根结点 SqBiTree bt;,一、 二叉树的顺序存储表示,22,例如:,A,B,C,D,E,F,A B D C E F,0 1 2 3 4 5 6 7 8 9 10 11 12 13,1,4,0,13,2,6,23,二、二叉树的链式存储表示,1. 二叉链表,2三叉链表,3双亲链

7、表,4线索链表,24,A,D,E,B,C,F,root,lchild data rchild,结点结构:,1. 二叉链表,25,typedef struct BiTNode / 结点结构 TElemType data; struct BiTNode *lchild, *rchild; / 左右孩子指针 BiTNode, *BiTree;,lchild data rchild,结点结构:,C 语言的类型描述如下:,26,A,D,E,B,C,F,root,2三叉链表,parent lchild data rchild,结点结构:,27,typedef struct TriTNode / 结点结构

8、TElemType data; struct TriTNode *lchild, *rchild; / 左右孩子指针 struct TriTNode *parent; /双亲指针 TriTNode, *TriTree;,parent lchild data rchild,结点结构:,C 语言的类型描述如下:,28,0 1 2 3 4 5 6,data parent,结点结构:,3双亲链表,LRTag,L R R R L,29,typedef struct BPTNode / 结点结构 TElemType data; int *parent; / 指向双亲的指针 char LRTag; / 左、

9、右孩子标志域 BPTNode typedef struct BPTree / 树结构 BPTNode nodesMAX_TREE_SIZE; int num_node; / 结点数目 int root; / 根结点的位置 BPTree,30,6.4 二叉树的遍历,31,一、问题的提出,二、先左后右的遍历算法,三、算法的递归描述,四、中序遍历算法的非递归描述,五、遍历算法的应用举例,32,顺着某一条搜索路径巡访二叉树 中的结点,使得每个结点均被访问一 次,而且仅被访问一次。,一、问题的提出,“访问”的含义可以很广,如:输出结 点的信息等。,33,“遍历”是任何类型均有的操作, 对线性结构而言,只

10、有一条搜索路 径(因为每个结点均只有一个后继), 故不需要另加讨论。而二叉树是非 线性结构,,每个结点有两个后继, 则存在如何遍历即按什么样的搜索 路径遍历的问题。,34,对“二叉树”而言,可以有三条搜索路径:,1先上后下的按层次遍历; 2先左(子树)后右(子树)的遍历; 3先右(子树)后左(子树)的遍历。,35,二、先左后右的遍历算法,先(根)序的遍历算法,中(根)序的遍历算法,后(根)序的遍历算法,36,若二叉树为空树,则空操作;否则, (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树。,先(根)序的遍历算法:,37,若二叉树为空树,则空操作;否则, (1)中序遍历左子树;

11、 (2)访问根结点; (3)中序遍历右子树。,中(根)序的遍历算法:,38,若二叉树为空树,则空操作;否则, (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。,后(根)序的遍历算法:,39,6.8 哈 夫 曼 树 与 哈 夫 曼 编 码,最优树的定义 如何构造最优树 前缀编码,40,一、最优树的定义,树的路径长度定义为: 树中每个结点的路径长度之和。,结点的路径长度定义为: 从根结点到该结点的路径上 分支的数目。,41,树的带权路径长度定义为: 树中所有叶子结点的带权路径长度之和 WPL(T) = wklk (对所有叶子结点)。,在所有含 n 个叶子结点、并带相同权 值的 m

12、 叉树中,必存在一棵其带权路径 长度取最小值的树,称为“最优树”。,例如:,42,2,7 9,7,5,4,9,2,WPL(T)= 72+52+23+43+92 =60,WPL(T)= 74+94+53+42+21 =89,5,4,43,根据给定的 n 个权值 w1, w2, , wn, 构造 n 棵二叉树的集合 F = T1, T2, , Tn, 其中每棵二叉树中均只含一个带权值 为 wi 的根结点,其左、右子树为空树;,二、如何构造最优树,(1),(赫夫曼算法) 以二叉树为例:,44,在 F 中选取其根结点的权值为最 小的两棵二叉树,分别作为左、 右子树构造一棵新的二叉树,并 置这棵新的二叉

13、树根结点的权值 为其左、右子树根结点的权值之 和;,(2),45,从F中删去这两棵树,同时加入 刚生成的新树;,重复 (2) 和 (3) 两步,直至 F 中只 含一棵树为止。,(3),(4),46,9,例如: 已知权值 W= 5, 6, 2, 9, 7 ,5,6,2,7,5,2,7,6,9,7,6,7,13,9,5,2,7,47,6,7,13,9,5,2,7,9,5,2,7,16,6,7,13,29,0,0,0,0,1,1,1,1,00,01,10,110,111,48,指的是,任何一个字符的编码都 不是同一字符集中另一个字符的编码 的前缀。,三、前缀编码,利用赫夫曼树可以构造一种不等长的二进制编码,并且构造所得的赫夫曼编码是一种最优前缀编码,即使所传电文的总长度最短。,49,1. 熟练掌握二叉树的结构特性,了解相应的证明方法。 2. 熟悉二叉树的各种存储结构的特点及适用范围。 3. 遍历二叉树是二叉树各种操作的基础。实现二叉树遍历的具体算法与所采用的存储结构有关。掌握各种遍历策略的递归算法,灵活运用遍历算法实现二叉树的其它操作。 4. 了解最优树的特性,掌握建立最优树和哈夫曼编码的方法,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号