树和二叉树4(树和森另)解读.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 补充:静态链表存储 * * * * void OutPath( Bitree T) { while ( T ) { printf(p→ data); if ( T-firstchild ) OutPath( T-firstchild); T = T-nextsibling; } // while } // OutPath //while循环写的遍历算法 * A B C E D A ^ B C D E ^ ^ ^ ^ ^ 三、求树的深度的算法: * int Depth(CSTree T) {if (T==NULL) return 0; else{ d1 = Depth(T-firstchild); d2 = Depth(T-nextsibling); return max(d1+1,d2) } 三、求树的深度的算法: * 四、输出树中所有从根到叶子的路径的算法: A B C D E F G H I J K 例如:对左图所示的树,其输出结果应为: A B E A B F A C A D G H I A D G H J A D G H K * void OutPath( Bitree T) { while ( T ) { printf(p→ data); if ( T-firstchild ) OutPath( T-firstchild); T = T-nextsibling; } // while } // OutPath //原有遍历算法 * void OutPath( Bitree T, Stack* S ) { while ( T ) { Push(*S, T-data ); if ( !T-firstchild ) Printstack(*S); else OutPath( T-firstchild, S ); Pop(*S); T = T-nextsibling; } // while } // OutPath // 输出森林中所有从根到叶的路径 * * 互联网上的域名如同我们现实生活中的门牌号码,可以在纷繁芜杂的网络世界里准确无误地把我们指引到我们要访问的站点。 * 结点间的路径长度: 两个结点之间的分支数。 结点的权值: 附加在结点上的信息。 结点带权路径: 结点上权值与该结点到根之间的路径长度的乘积。 A B C D E F G H I J * 树的带权路径长度: (Weight Path Length) 树中所有叶子结点的带权路径长度之和。 WPL = (叶到根的平均路径长度) 哈夫曼(huffman)树: 使WPL取最小值的二叉树,又称最优二叉树 A B C D E F G H I J 20 30 50 例:有n个叶子结点,第 i个叶子结点的权值为Wi,根到该结点的路径长度为Li,则: * 例如,给定权值{5,4,7,2,5},可生成多棵二叉树 WPL =2*1+7*3+4*3 +5*3+5*3=65 5 7 2 5 4 (a) 5 7 2 5 4 (b) WPL=2*1+ 4*2+5*3 +7*4+5*4=73 * WPL= (2+4)*3+(7+5+5)*2=52 WPL= (5+5+7)*2+(2+4)*3=52 5 7 2 5 4 (c) 5 7 2 5 4 (d) * 如何构成一棵最优二叉树? (哈夫曼算法) (1)根据n个权值{w1, w2, … , wn}构成n棵二叉树的集合F={T1, T2, …, Tn},其中每棵二叉树Ti只有一个带权为Wi的根结点,其左右子树均空。 (2)在F中选两棵根结点的权值最小的树作为左右子树构成一棵新的二叉树,且根结点的权值为其左右子树根结点的权值之和。 (3)在F中删除这两棵树,同时将新的二叉树加入F (4)重复(2)、(3),直到F只含一棵树为止。 9 例如: 已知权值 W={ 5, 6, 2, 9, 7 } 5 6 2 7 2 5 7 6 9 7 6 7 13 9 2 5 7 6 7 13 9 2 5 7 9 2 5 7 16 6 7 13 29 * 哈夫曼树的应用: 在解决某些判定问题时的最佳判定算法。 例: 将学生百分成绩按分数段分级的程序。 若学生成绩分布是均匀的,可用二叉树结构来实现。 a60 a70 a8

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档