数据结构C语言版DS06-树讲义.ppt

  1. 1、本文档共86页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
森林转换成二叉树 将各棵树分别转换成二叉树 将每棵树的根结点用线相连 以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构 A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J 二叉树转换成树 加线:若p结点是双亲结点的左孩子,则将p的右孩子,右孩子的右孩子,……沿分支找到的所有右孩子,都与p的双亲用线连起来 抹线:抹掉原二叉树中双亲与右孩子之间的连线 调整:将结点按层次排列,形成树结构 A B C D E F G H I A B C D E F G H I A B C D E F G H I A B C D E F G H I A B C D E F G H I 二叉树转换成森林 抹线:将二叉树中根结点与其右孩子连线,及沿右分支 搜索到的所有右孩子间连线全部抹掉,使之变成孤立的二叉树 还原:将孤立的二叉树还原成树 A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J 树和森林的遍历 先根遍历 若树非空,则遍历方法为: a.访问根结点。 b.从左到右,依次先根遍历根结点的每一棵子树。 一、树的遍历 若树非空,则遍历方法为: a.从左到右,依次后根遍历根结点的每一棵子树。 b.访问根结点。 树的后根遍历 若树非空,则遍历方法为: 先访问第一层上的结点,然后依次遍历第二层,……第n层的结点。 树的按层次遍历 A B C D E F G H I J K L M N O 先根遍历: 后根遍历: 层次遍历: A B E F I G C D H J K L N O M E I F G B C J K N O L M H D A A B C D E F G H I J K L M N O 二、森林的遍历 若森林非空,则遍历方法为: a. 访问森林中第一棵树的根结点。 b.先根遍历第一棵树的根结点的子树森林。 c.先根遍历除去第一棵树之后剩余的树构成的森林。 森林的先根遍历 树和森林的遍历 若森林非空,则遍历方法为: a. 中根遍历森林中第一棵树的根结点的子树森林。 b. 访问第一棵树的根结点。 c. 中根遍历除去第一棵树之后剩余的树构成的森林。 森林的中根遍历 若森林非空,则遍历方法为: a. 后根遍历森林中第一棵树的根结点的子树森林。 b. 后根遍历除去第一棵树之后剩余的树构成的森林。 c. 访问第一棵树的根结点。 森林的后根遍历 先根遍历:A B C D E F G H I J 中根遍历:B C D A F E H J I G 后根遍历:D C B F J I H G E A 1 2 3 4 5 6 7 后根遍历如下森林 所得序列为: DECBJIH7654321GA 6.5 哈夫曼树及其应用 与哈夫曼树相关的基本概念 路径和路径长度 路径:从一个结点到另一个结点之间的分支序列。 路径长度:从一个结点到另一个结点所经过的分支数目。 结点的权和带权路径长度 结点的权:在实际的应用中,人们常常给树的每个结点赋予一个具有某种实际意义的数值,我们称该数值为这个结点的权。 结点的带权路径长度:从树根到某一结点的路径长度与该结点的权的乘积,叫做该结点的带权路径长度。 树的带权路径长度 树的带权路径长度是指树中所有叶子结点的带权路径长度之和。 树的带权路径长度 树的带权路径长度是指树中所有叶子结点的带权路径长度之和。 是由n个带权叶子结点构成的所有二叉树中带权路径长度WPL最小的二叉树。哈夫曼树又叫最佳判定树。 哈夫曼树 例:有4个结点,权值分别为7,5,2,4,构造有4个叶子结点的二叉树 a b c d 7 5 2 4 WPL=7*2+5*2+2*2+4*2=36 d c a b 2 4 7 5 WPL=7*3+5*3+2*1+4*2=46 a b c d 7 5 2 4 WPL=7*1+5*2+2*3+4*3=35 此为哈夫曼树 构造Huffman树步骤 根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树森林,令其权值为wj 在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和 在森林中删除这两棵树,同时将新得到的二叉树加入森林中 重复上述两步,直到只含一棵树为止,这棵树即为所求的哈夫曼树 构造Huffman树的方法——Huffman算法 例: a 7 b 5 c

文档评论(0)

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

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

1亿VIP精品文档

相关文档