数据结构导论第四章_第1页
数据结构导论第四章_第2页
数据结构导论第四章_第3页
数据结构导论第四章_第4页
数据结构导论第四章_第5页
已阅读5页,还剩144页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构导论第四章1第一页,共一百四十九页,编辑于2023年,星期三第4章树4.1树的基本概念4.2二叉树4.3二叉树的存储结构4.4二叉树的遍历4.5递归消除4.6树和林4.7判定树和哈夫曼树第二页,共一百四十九页,编辑于2023年,星期三本章项目:电文编码第三页,共一百四十九页,编辑于2023年,星期三文字电文编码电波译码摩尔斯电码(又译为摩斯电码)是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。它由美国人艾尔菲德·维尔发明(1835年)。第四页,共一百四十九页,编辑于2023年,星期三网络信息传输:文字数字编码电信号电文编码发送者数字编码文字电文编码接收者你好0101010101你好核心问题:电文如何编码称为01串??第五页,共一百四十九页,编辑于2023年,星期三本章项目:电文编码问题涉及知识点:1、树的概念2、树的专业术语3、二叉树的概念4、哈夫曼树和哈夫曼编码核心问题:如何将电报文字转换成可传送编码第六页,共一百四十九页,编辑于2023年,星期三自然中的树抽象的树知识点1:树的概念第七页,共一百四十九页,编辑于2023年,星期三旋转后第八页,共一百四十九页,编辑于2023年,星期三适当进行调整ABCDEFGHI第九页,共一百四十九页,编辑于2023年,星期三数据结构中树的形态,具有分层特点ABCDEFGHI第十页,共一百四十九页,编辑于2023年,星期三某姓氏族谱第十一页,共一百四十九页,编辑于2023年,星期三ABCDEFGHIJKLMNOPQRSTUVWXYZ……..对树中的结点给定一个符号名称,具有一对多的特点第十二页,共一百四十九页,编辑于2023年,星期三树描述的是一种层次结构,是一种一对多的逻辑关系FGIJABCEDH第十三页,共一百四十九页,编辑于2023年,星期三树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。n>1时,有且仅有一个称为根的结点;其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每个集合又是一棵树,称为子树知识点1:树的概念FGIJABCEDH根根第十四页,共一百四十九页,编辑于2023年,星期三树的其他表示形式ABCDEFHGM第十五页,共一百四十九页,编辑于2023年,星期三结点:数据元素的内容及其指向其子树根的分支结点的度:结点拥有的子树的数目。树的度:树内各结点的度的最大值;知识点2:树的专业术语ABCDEFHGMA、B、C、D、E、F、G、H、M均称为结点A结点的度为2C结点的度为3M结点的度为0树的度为3第十六页,共一百四十九页,编辑于2023年,星期三叶子(终端结点),非终端结点:度为0的结点称为叶子结点;度不为0的结点称为非终端结点。ABCDEFHGM第十七页,共一百四十九页,编辑于2023年,星期三结点的层数:树中根结点的层次为1,根结点子树的根为第2层,以此类推。树的高度(深度):树中所有结点层次的最大值ABCDEFHGM第十八页,共一百四十九页,编辑于2023年,星期三孩子,双亲,兄弟,堂兄:结点的子树的根称为该结点的孩子;该结点称为孩子的双亲;同一个双亲的孩子之间互称兄弟;双亲在同一层的结点互为堂兄弟。ABCDEFHGMA是B、C的双亲B、C是A的孩子B、C是兄弟关系E、F是堂兄弟关系第十九页,共一百四十九页,编辑于2023年,星期三路径:若树中存在一个序列k1,k2…kn,使得ki是ki+1的双亲,则称该结点序列为k1到kn的一条路径。路径长度:这些节点经过的边的条数ABCDEFHGM序列:ABDME序列:ABDM序列:ACF是路径非路径是路径第二十页,共一百四十九页,编辑于2023年,星期三子孙,祖先:以某结点为根的子树中的所有结点都被称为是该结点的子孙。从根结点到该结点路径上的所有结点称为该结点的祖先。ABCDEFHGM第二十一页,共一百四十九页,编辑于2023年,星期三森林:多棵互不相交的树的集合构成森林ABCDEFHGM三棵树构成的森林第二十二页,共一百四十九页,编辑于2023年,星期三结点结点的度(Degree)叶子(Leaf)或终端结点分支结点或非终端结点树的度层次(Level)树的深度(Depth)孩子(child)双亲(Parent)兄弟(Sibling)祖先子孙路径ABCDEFHGM第二十三页,共一百四十九页,编辑于2023年,星期三知识点3:二叉树的概念二叉树(BinaryTree):或者是一棵空树,或者是一棵由一个根结点和两棵互不相交的左子树和右子树所组成的非空树,左子树和右子树同样也都是二叉树ABCDEFHM第二十四页,共一百四十九页,编辑于2023年,星期三特征:每个结点最多只有两棵子树子树有左右之分,次序不能任意颠倒,只有一棵子树时也必须分清是左子树还是右子树ABCACB第二十五页,共一百四十九页,编辑于2023年,星期三网络信息传输:文字数字编码电信号电文编码发送者数字编码文字电文编码接收者你好0101010101你好核心问题:电文如何编码称为01串??第二十六页,共一百四十九页,编辑于2023年,星期三项目实现的进一步分析:项目核心问题:如何将电报文字转换成01编码扩展问题:电文传送时的高效性第二十七页,共一百四十九页,编辑于2023年,星期三扩展问题:电文传送时的高效性在计算机及通信中,常用二进制编码来表示字符,假设某电文通信中只使用ABCD四个字符每个字母用两位二进制数表示,例如传输100个字母需要用200个二进制位此种编码方式为等长编码,此时电文长度由电文字符数决定对于电文:DABC可翻译为编码:对于编码:01001110可准确翻译为:00表示A01表示B10表示C11表示DBADC11000110第二十八页,共一百四十九页,编辑于2023年,星期三实际情况:字符在实际使用中出现频率不一样!新问题1:如何让电文编码缩短为提高电文传送效率,应让电文编码尽量短考虑问题:出现频率高的字符编码位数少出现频率低的字符编码位数多以此降低电文总长度常用汉字6335个,最常用字560个,常用字807个,次常用字1033个,共2400个。这些字占了书刊物汉字出现次数的99%A8.19B1.47C3.83D3.91E12.25F2.26G1.71H4.57I7.10J0.14K0.41L3.77………

前面十位是:ETAOINRSDC第二十九页,共一百四十九页,编辑于2023年,星期三假定:某电文通信中只由ABCD四个字符构成且出现频率分别为:000011001000考虑问题:出现频率高的字符编码位数少出现频率低的字符编码位数多以此降低电文总长度000表示A001表示B01表示C1表示DA5%B10%C15%D70%假定:问题:传输100个字母所用的二进制位为电文:ACDBA翻译成编码:编码:000011001翻译成电文:3×5+3×10+2×151×70+=145ACDB第三十页,共一百四十九页,编辑于2023年,星期三此种编码方式为不等长编码,采用不等长编码可缩短电文编码长度,从而提高电文传送效率假定:某电文通信中只由ABCD四个字符构成且出现频率分别为:考虑问题:出现频率高的字符编码位数少出现频率低的字符编码位数多以此降低电文总长度000表示A001表示B01表示C1表示DA5%B10%C15%D70%假定:第三十一页,共一百四十九页,编辑于2023年,星期三假定:翻译:CBDB翻译:CBDCD新问题2:随意的不等长编码可能导致编码翻译时出现歧义编码:000011001问题:编码是任意给定的吗?000表示A001表示B00表示C1表示D假定:某电文通信中只由ABCD四个字符构成且出现频率分别为:A5%B10%C15%D70%000011001000011001000011001错误!错误!第三十二页,共一百四十九页,编辑于2023年,星期三新知识:设计不等长编码时,必须做到:任何一个字符的编码不能是另一个字符编码的前缀,这种编码为前缀码新问题2:随意的不等长编码可能导致编码翻译时出现歧义000表示A001表示B01表示C1表示D我们设计的第一种编码是前缀码新问题3:如何设计前缀码第三十三页,共一百四十九页,编辑于2023年,星期三知识点4:哈夫曼树与哈夫曼编码树的路径长度:树的根结点到树中每一个结点的路径长度之和。结点的带权的路径长度:该结点到根结点之间的路程长度与该结点上权的乘积路径:若树中存在一个序列k1,k2…kn,使得ki是ki+1的双亲,则称该结点序列为k1到kn的一条路径。路径长度:这些节点经过的边的条数第三十四页,共一百四十九页,编辑于2023年,星期三知识点4:哈夫曼树与哈夫曼编码树的路径长度:树的根结点到树中每一个结点的路径长度之和。结点的带权的路径长度:该结点到根结点之间的路程长度与该结点上权的乘积树的路径长度:1+1+2+2+3+3结点a的带权路径长度:7*3dcab2475第三十五页,共一百四十九页,编辑于2023年,星期三树的带权路径长度:树中所有叶子结点的带权的路径长度的和。通常记为:WPL(WeightedPathLength)。树的带权路径长度:4*2+7*3+5*3+2*1dcab2475第三十六页,共一百四十九页,编辑于2023年,星期三树的带权路径长度:树中所有叶子结点的带权的路径长度的和。通常记为:WPL(WeightedPathLength)。由n个带权值的叶子结点构成的二叉树中,WPL最小的二叉树称为最优二叉树,或哈夫曼(Huffman)树。WPL=4*2+7*3+5*3+2*1=46dcab2475第三十七页,共一百四十九页,编辑于2023年,星期三abcd7524WPL=7*2+5*2+2*2+4*2=36abcd7524WPL=7*1+5*2+2*3+4*3=35WPL=7*1+4*3+2*3+5*2=35abdc7425第三十八页,共一百四十九页,编辑于2023年,星期三1、根据给定的n个权值{w1,w2,…,wn},构造n棵只有根结点的二叉树,令其权值为wj;2、在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和;3、从森林中删除这两棵树,同时将新得到的二叉树加入森林中;4、重复上述两步,直到森林中只含一棵树为止,这棵树即哈夫曼树。哈夫曼树的构造方法第三十九页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}构造以权值为叶子的哈夫曼树5627第一步:把每个权值看作只有一个结点的树第四十页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}构造以权值为叶子的哈夫曼树5267第二步:取权值最小的两棵树,合并成,新树的权值为两棵子树权值之和7第四十一页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}构造以权值为叶子的哈夫曼树5267第三步:从森林中去掉被合并的结点,并将新合并的树加入到森林中,继续执行第二步,直到森林合并成为一棵树7第四十二页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}构造以权值为叶子的哈夫曼树5267713第三步:从森林中去掉被合并的结点,并将新合并的树加入到森林中,继续执行第二步,直到森林合并成为一棵树第四十三页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}构造以权值为叶子的哈夫曼树526771316第三步:从森林中去掉被合并的结点,并将新合并的树加入到森林中,继续执行第二步,直到森林合并成为一棵树第四十四页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}构造以权值为叶子的哈夫曼树526771316第三步:从森林中去掉被合并的结点,并将新合并的树加入到森林中,继续执行第二步,直到森林合并成为一棵树第四十五页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}构造以权值为叶子的哈夫曼树52677131629第三步:从森林中去掉被合并的结点,并将新合并的树加入到森林中,继续执行第二步,直到森林合并成为一棵树构造完成第四十六页,共一百四十九页,编辑于2023年,星期三设计电文编码时,随意的不等长编码可能导致编码翻译时出现歧义使用前缀码,可解决不等长编码出现的歧义利用哈夫曼树可构造前缀码构造方法:1,将字符集中的每个字符作为节点2,每个字符的出现频率作为节点的权值3,构造哈夫曼树4,令哈夫曼树中的左分支为0,右分支为1从根到叶子节点的01序列即为叶子节点的编码第四十七页,共一百四十九页,编辑于2023年,星期三假定:某电文通信中只由ABCD四个字符构成且出现频率分别为:A5%B10%C15%D70%0.050.10.150.7第四十八页,共一百四十九页,编辑于2023年,星期三假定:某电文通信中只由ABCD四个字符构成且出现频率分别为:A5%B10%C15%D70%0.050.10.150.70.15第四十九页,共一百四十九页,编辑于2023年,星期三假定:某电文通信中只由ABCD四个字符构成且出现频率分别为:A5%B10%C15%D70%0.050.10.150.70.150.3第五十页,共一百四十九页,编辑于2023年,星期三假定:某电文通信中只由ABCD四个字符构成且出现频率分别为:A5%B10%C15%D70%0.050.10.150.70.150.31ABCD010101A的编码:000B的编码:001C的编码:01D的编码:1电文:DABC编码:100000101每个字符的编码都不是另一字符编码的前缀第五十一页,共一百四十九页,编辑于2023年,星期三项目完成,总结:1,树的概念2,专业术语的定义3,二叉树的概念4,哈夫曼树和哈夫曼编码下节内容:1,二叉树的性质2,二叉树基本操作3,二叉树的应用作业:P996.21第五十二页,共一百四十九页,编辑于2023年,星期三n(n>0)个结点的树的高度:最低是多少?最高是多少?答案:1,n练习ABD第五十三页,共一百四十九页,编辑于2023年,星期三答案:√一棵树应满足下列条件:(1)有且仅有一个结点没有前驱(双亲),称该结点为树根;(2)除根结点以外,其余每个结点有且仅有一个直接前驱;(3)树中每个结点可以有多个直接后继(孩子结点)。判断第五十四页,共一百四十九页,编辑于2023年,星期三1、哈夫曼树只有度为0和2的结点,无度为1的结点;2、n个叶子的哈夫曼树的形态一般不唯一,但WPL是相同的;3、n个叶子的哈夫曼树共有2n-1个结点。判断答案:正确第五十五页,共一百四十九页,编辑于2023年,星期三0.10.20.301练习:假设有字符集{A,B,C,D}其在电文中的使用频率分别为{0.1,0.4,0.3,0.2}请给出该字符集中每个字符的哈夫曼编码并将AABCDD电文翻译为哈夫曼编码0.30.6010.4101ADCB编码:A100B0C11D101AABBCDD翻译:1000011101101第五十六页,共一百四十九页,编辑于2023年,星期三2009年10月考题:27、由字符集{s,t,a,e,I}及其在电文中出现的频度构建的哈夫曼树如图所示。已知某段电文的哈夫曼编码为111000010100,请根据该哈夫曼树进行译码,写出原来的电文。第五十七页,共一百四十九页,编辑于2023年,星期三4.2二叉树二叉树(BinaryTree):或者是一棵空树,或者是一棵由一个根结点和两棵互不相交的左子树和右子树所组成的非空树,左子树和右子树同样也都是二叉树123456789101112131415第五十八页,共一百四十九页,编辑于2023年,星期三特征:每个结点最多只有两棵子树子树有左右之分,其次序不能任意颠倒,只有一棵子树时也必须分清是左、右子树。ACBABC第五十九页,共一百四十九页,编辑于2023年,星期三二叉树的五种形态(a)(b)(c)(d)(e)第六十页,共一百四十九页,编辑于2023年,星期三(1)初始化INITIATE(BT)(2)求根ROOT(BT)(3)求双亲PARENT(BT,x)(4)求左孩子、右孩子Child(BT,x),RChild(BT,x)(5)建树CREAT(x,LBT,RBT)(6)剪枝DELLEFT(BT,x)和DELRIGHT(BT,x)二叉树的基本运算第六十一页,共一百四十九页,编辑于2023年,星期三1.一个非空二叉树的第i层上至多有2i-1个结点(i1)证明:i=1,只有根结点,显然成立 设i=k时成立,最多有2k-1个结点 当i=k+1时,最多的结点个数:

2k-1*2=2k-1+1=2k=2(

k+1)-1二叉树的性质123456789101112131415第六十二页,共一百四十九页,编辑于2023年,星期三2.深度为k的二叉树至多有2k-1个结点(k1)

证明:二叉树的结点个数为: 1+2+…+2k-1=2k-1123456789101112131415第六十三页,共一百四十九页,编辑于2023年,星期三3.对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。证明:设n1为T中度为1的结点数,则总结点数: n=n0+n1+n2(1)另:根据各个结点的前驱和后继情况分支条数=n-1分支条数=n1+2*n2(2)由(1)和(2)有:n1+2*n2=n0+n1+n2-1故n0=n2+1;第六十四页,共一百四十九页,编辑于2023年,星期三考虑到有序性,任一结点在树中都有确切的位置,因此可以对满二叉树进行编号。编号方式为:从上到下,从左到右。满二叉树深度为k且有2k-1个结点的二叉树123456789101112131415第六十五页,共一百四十九页,编辑于2023年,星期三完全二叉树深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树编号从1到n的结点一一对应时,称为完全二叉树。abcdefghij第六十六页,共一百四十九页,编辑于2023年,星期三1.满二叉树一定是一棵完全二叉树,反之完全二叉树不一定是一棵满二叉树。(√)2.满二叉树的叶子结点全部在最底层,而完全二叉树的叶子结点可以分布在最下面两层。

(√)判断题第六十七页,共一百四十九页,编辑于2023年,星期三4.具有n个结点的完全二叉树的深度:k=log2(n)+1证明:假设n个结点的完全二叉树的深度为k,则n的值应大于深度为k-1的满二叉树的结点数2k-1-1,小于等于深度为k的满二叉树的结点数2k-1,即

2k-1-1<n≤2k-1

进一步可推导出

2k-1≤n<2k两边取对数后,有

k-1≤log2(n)<k进一步可推导出

log2(n)<k≤log2(n)+1因为k是整数,所以有k=log2(n)+1

第六十八页,共一百四十九页,编辑于2023年,星期三(a)如果i=1,此结点为根结点,无双亲;若i>1,则其双亲结点是i/2。(b)如果2i>n,则结点i无左孩子,i为叶子结点,否则其左孩子是结点2i。(c)如果2i+1>n,则结点i无右孩子,否则其右孩子是结点2i+1。5.如果将一棵有n个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号1,2,3,…,n,则对任一结点i(1in)有abcdefghij第六十九页,共一百四十九页,编辑于2023年,星期三1.一棵树高为K的完全二叉树至少有()个结点A.2k–1B.2k-1–1C.2k-1

D.2k习题答案:C第七十页,共一百四十九页,编辑于2023年,星期三2.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有______个叶子结点。习题结点总个数n=2+3+4+x前驱后继n-1=2*1+3*2+4*3故x=12答案:12第七十一页,共一百四十九页,编辑于2023年,星期三习题3.有关二叉树下列说法正确的是()A.二叉树的度为2B.一棵二叉树的度可以小于2C.二叉树中至少有一个结点的度为2D.二叉树中任何一个结点的度都为2答案:B第七十二页,共一百四十九页,编辑于2023年,星期三4.3二叉树的存储结构顺序存储结构链式存储结构第七十三页,共一百四十九页,编辑于2023年,星期三二叉树的顺序存储结构整个二叉树可以按照从上到下,从左到右的顺序编号;abcdefghij第七十四页,共一百四十九页,编辑于2023年,星期三1.顺序存贮结构将一棵二叉树按完全二叉树顺序存放到一维数组中abcdefghm123456789101112131415

0123456789101112131415abcdefghm第七十五页,共一百四十九页,编辑于2023年,星期三顺序存储结构举例ABCABCØØØØAØBØØØC第七十六页,共一百四十九页,编辑于2023年,星期三对于一棵二叉树,若采用顺序存贮时,当它为完全二叉树时,比较方便;若为非完全二叉树,将会浪费大量存贮单元。因此,对于非完全二叉树,宜采用下面的链式存储结构。第七十七页,共一百四十九页,编辑于2023年,星期三2.链式存储结构二叉链表三叉链表第七十八页,共一百四十九页,编辑于2023年,星期三二叉树的链式存储结构二叉链表lchilddatarchilddatalchildrchild第七十九页,共一百四十九页,编辑于2023年,星期三ABDCEFADEBCFroot第八十页,共一百四十九页,编辑于2023年,星期三二叉链表的定义structbtnode{//结点结构datatypedata;structbtnode*lchild,*rchild;}typedefstructbtnode*bitreptr;bitreptr*root;结点结构:lchilddatarchild第八十一页,共一百四十九页,编辑于2023年,星期三ADEBCFroot问题:如何找到某结点的子树?如何找到某结点的双亲?第八十二页,共一百四十九页,编辑于2023年,星期三三叉链表lchilddatarchildparentADEBCFroot第八十三页,共一百四十九页,编辑于2023年,星期三三叉链表的定义structbtnode{//结点结构datatypedata;structbtnode*lchild,*rchild}typedefstructbtnode*bitreptr;bitreptr*root;结点结构:lchilddatarchildparent,*parent;;第八十四页,共一百四十九页,编辑于2023年,星期三链式存储的缺点;

若一棵二叉树有n个结点,采用二叉链表作存贮结构时,共有2n个指针域,其中只有n-1个指针指向左右孩子,其余n+1个指针为空,没有发挥作用。第八十五页,共一百四十九页,编辑于2023年,星期三4.4二叉树的遍历遍历一棵二叉树是按某种次序系统地“访问”二叉树上的所有结点,使每个结点恰好被“访问”一次。先(根)序的遍历算法中(根)序的遍历算法后(根)序的遍历算法“访问”的含义可以很广,如:输出结点的信息等第八十六页,共一百四十九页,编辑于2023年,星期三若二叉树为空树,则空操作;否则,(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。先(根)序的遍历算法:AECBGL第八十七页,共一百四十九页,编辑于2023年,星期三若二叉树为空树,则空操作;否则,(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。中(根)序的遍历算法:AECBGL第八十八页,共一百四十九页,编辑于2023年,星期三若二叉树为空树,则空操作;否则,(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。后(根)序的遍历算法:AECBGL第八十九页,共一百四十九页,编辑于2023年,星期三先(根)序的遍历算法:voidPreorder(bitreptrr){//先序遍历二叉树

if(r!=NULL){visit(r);Preorder(r->lchild);Preorder(r->rchild);

}}AECBGL第九十页,共一百四十九页,编辑于2023年,星期三中(根)序的遍历算法:voidInorder(bitreptrr){//中序遍历二叉树

if(r!=NULL){Inorder(r->lchild);visit(r);Inorder(r->rchild);

}}AECBGL第九十一页,共一百四十九页,编辑于2023年,星期三后(根)序的遍历算法:voidPostorder(bitreptrr){//后序遍历二叉树

if(r!=NULL){Postorder(r->lchild);Postorder(r->rchild);visit(r);

}}AECBGL第九十二页,共一百四十九页,编辑于2023年,星期三二叉树的遍历算法:AECBGLDLRLDR、LRD、DLR第九十三页,共一百四十九页,编辑于2023年,星期三遍历举例ABCDEF前序序列:abcdef中序序列:cbefda后序序列:cfedba第九十四页,共一百四十九页,编辑于2023年,星期三习题

1.给定二叉树如下图所示。设N代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。若遍历后的结点序列为3,1,7,5,6,2,4,则其遍历方式是LRNB.NRLC.RLND.RNL答案:D第九十五页,共一百四十九页,编辑于2023年,星期三习题

2.假设前序序列为ABDGHCEFI,中序序列为GDHBAECIF,请确定一棵二叉树ABDGHCEFIGDHBAECIF前序中序第九十六页,共一百四十九页,编辑于2023年,星期三习题

8.试找出满足下列条件的二叉树1)先序序列与中序序列相同2)中序序列与后序序列相同3)先序序列与后序序列相同答案1)不含左子树的二叉树2)不含右子树的二叉树3)空二叉树或只含根结点的二叉树第九十七页,共一百四十九页,编辑于2023年,星期三习题

4.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树

A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子先序:根左右后序:左右根答案:B第九十八页,共一百四十九页,编辑于2023年,星期三4.6树和林考虑存储结构时,主要考虑逻辑结构:数据元素数据元素之间的关系第九十九页,共一百四十九页,编辑于2023年,星期三树的存储结构ABECDF双亲表示法

孩子链表表示法

孩子兄弟链表表示法

第一百页,共一百四十九页,编辑于2023年,星期三孩子链表表示法顺序存储结点+链式存储孩子结构;找孩子容易,找双亲难;01234567第一百零一页,共一百四十九页,编辑于2023年,星期三孩子兄弟链表表示法两个指针:左孩子指针,右孩子指针第一百零二页,共一百四十九页,编辑于2023年,星期三双亲表示法树的双亲表示法主要描述的是结点的双亲关系顺序表示,存放顶点和双亲信息第一百零三页,共一百四十九页,编辑于2023年,星期三请画出该树的孩子链表结构图请画出该树的孩子兄弟链表结构图双亲表示法结构图第一百零四页,共一百四十九页,编辑于2023年,星期三树的遍历前序遍历树若树非空,则:(1)访问树的根结点;(2)依次前序遍历树的第一棵子树、第二棵子树,……第一百零五页,共一百四十九页,编辑于2023年,星期三树的遍历后序遍历树若树非空,则:(1)依次后序遍历树的第一棵子树、第二棵子树,……(2)访问树的根结点;第一百零六页,共一百四十九页,编辑于2023年,星期三树的遍历层次遍历树1)访问树的根结点;2)依次前序遍历树的第一层结点、第二结点,……第一百零七页,共一百四十九页,编辑于2023年,星期三ABCED前序遍历序列:后序遍历序列:层次遍历序列:ABCDEBCEDAABCDE第一百零八页,共一百四十九页,编辑于2023年,星期三森林是由若干棵树组成,可以将森林中的每棵树的根结点看作是兄弟树、森林与二叉树的关系树与二叉树的相互转换森林与二叉树的相互转换第一百零九页,共一百四十九页,编辑于2023年,星期三

1.树与二叉树的相互转换树转换成的二叉树其右子树一定为空第一百一十页,共一百四十九页,编辑于2023年,星期三2.森林与二叉树的相互转换第一百一十一页,共一百四十九页,编辑于2023年,星期三森林转换为二叉树第一百一十二页,共一百四十九页,编辑于2023年,星期三森林转换为二叉树第一百一十三页,共一百四十九页,编辑于2023年,星期三习题将二叉树转换成树ABCDEFGHIJKLABCDEFGHIJKLCDABCDEFGHIJKLC第一百一十四页,共一百四十九页,编辑于2023年,星期三DEFGHIJLABCKFILCABEGHJKD习题二叉树到森林的转换第一百一十五页,共一百四十九页,编辑于2023年,星期三习题设X是树T中的一个非根结点,B是T所对应的二叉树。在B中,X是其双亲的右孩子,下列结论正确的是()。A.在树T中,X是其双亲的第一个孩子B.在树T中,X一定无右边兄弟C.在树T中,X一定是叶子结点D.在树T中,X一定有左边兄弟答案:D第一百一十六页,共一百四十九页,编辑于2023年,星期三4.7判定树和哈夫曼树分类与判定树哈夫曼树与哈夫曼算法第一百一十七页,共一百四十九页,编辑于2023年,星期三分类与判定树问题:编写程序实现将百分制成绩转换为五级制成绩假设成绩已存入score变量中,转换后等级存入grade变量if(score<60

)grade=“bad”;elseif(score<70)grade=“pass”;elseif(score<80

)grade=“general”;elseif(score<90)grade=“good”;elseif(score<=100)grade=“excellent”;elsegrade=“error”;第一百一十八页,共一百四十九页,编辑于2023年,星期三程序已写出,但是此种判定形式是否最好呢?从何角度考虑程序是否最优?问题:编写程序实现将百分制成绩转换为五级制成绩if(score<60

)grade=“bad”;elseif(score<70)grade=“pass”;elseif(score<80

)grade=“general”;elseif(score<90)grade=“good”;elseif(score<=100)grade=“excellent”;elsegrade=“error”;第一百一十九页,共一百四十九页,编辑于2023年,星期三问题:编写程序实现将百分制成绩转换为五级制成绩if(score<60

)grade=“bad”;elseif(score<70)grade=“pass”;elseif(score<80

)grade=“general”;elseif(score<90)grade=“good”;elseif(score<=100)grade=“excellent”;elsegrade=“error”;现实中成绩在五个等级上的分布是不均匀的!!假设分布规律如下:分数0-5960-6970-7980-8990-100比例0.050.150.400.300.10第一百二十页,共一百四十九页,编辑于2023年,星期三假设成绩在五个等级上的分布规律如下:if(score<60

)grade=“bad”;elseif(score<70)grade=“pass”;elseif(score<80

)grade=“general”;elseif(score<90)grade=“good”;elseif(score<=100)grade=“excellent”;elsegrade=“error”;分数0-5960-6970-7980-8990-100比例0.050.150.400.300.10哪个判断执行次数较多?判定语句什么顺序最好?第一百二十一页,共一百四十九页,编辑于2023年,星期三假设成绩在五个等级上的分布规律如下:分数0-5960-6970-7980-8990-100比例0.050.150.400.300.100.300.050.400.100.150.300.6010.15先判断是否70-79之间再判断是否80-89后判断是否60-69再判断…第一百二十二页,共一百四十九页,编辑于2023年,星期三假设成绩在五个等级上的分布规律如下:分数0-5960-6970-7980-8990-100比例0.050.150.400.300.10良不及格中优及格60-6980-8970-79>60YNNYNYYN如何构造出最佳的判定树?第一百二十三页,共一百四十九页,编辑于2023年,星期三概念树的路径长度:树的根结点到树中每一个结点的路径长度的和。结点的带权的路径长度:该结点到根结点之间的路程长度与该结点上权的乘积树的带权的路径长度:树中所有叶子结点的带权的路径长度的和。通常记为:WPL(WeightedPathLength)。由n个带权值的叶子结点构成的二叉树中,WPL最小的二叉树称为最优二叉树,或哈夫曼(Huffman)树。第一百二十四页,共一百四十九页,编辑于2023年,星期三有4个结点,权值分别为7,5,2,4,构造有4个叶子结点二叉树abcd7524WPL=7*2+5*2+2*2+4*2=36WPL=7*3+5*3+2*1+4*2=46abcd7524WPL=7*1+5*2+2*3+4*3=35dcab2475第一百二十五页,共一百四十九页,编辑于2023年,星期三由n个带权值的叶子结点构成的二叉树中,WPL最小的二叉树称为最优二叉树,或哈夫曼(Huffman)树。abcd7524哈夫曼树的形态是不唯一第一百二十六页,共一百四十九页,编辑于2023年,星期三根据给定的n个权值{w1,w2,…,wn},构造n棵只有根结点的二叉树,令其权值为wj;在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和;在森林中删除这两棵树,同时将新得到的二叉树加入森林中;重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树。构造Huffman树步骤第一百二十七页,共一百四十九页,编辑于2023年,星期三9例如:已知权值W={5,6,2,9,7}5627第一百二十八页,共一百四十九页,编辑于2023年,星期三957267例如:已知权值W={5,6,2,9,7}第一百二十九页,共一百四十九页,编辑于2023年,星期三95726713例如:已知权值W={5,6,2,9,7}第一百三十页,共一百四十九页,编辑于2023年,星期三9572671316例如:已知权值W={5,6,2,9,7}第一百三十一页,共一百四十九页,编辑于2023年,星期三957267131629例如:已知权值W={5,6,2,9,7}第一百三十二页,共一百四十九页,编辑于2023年,星期三957262971316根据权值构造得到哈夫曼树构造哈夫曼树的目的是什么呢?例如:已知权值W={5,6,2,9,7}第一百三十三页,共一百四十九页,编辑于2023年,星期三假设成绩在五个等级上的分布规律如下:分数0-5960-6970-7980-8990-100比例0.050.150.400.300.100.300.050.400.100.150.300.6010.15先判断是否70-79之间再判断是否80-89后判断是否60-69再判断…第一百三十四页,共一百四十九

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论