d06-数据结构要点.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * 2005 第 * 页 6.4 树和森林 树的遍历 遍历——按一定规律走遍树的各个顶点,且使每一顶点仅被访问一次,即找一个完整而有规律的走法,以得到树中所有结点的一个线性排列。 常用方法 先根(序)遍历:先访问树的根结点,然后依次先根遍历根的每棵子树。 后根(序)遍历:先依次后根遍历每棵子树,然后访问根结点。 按层次遍历:先访问第一层上的结点,然后依次遍历第二层,……第n层的结点。 第 * 页 6.4 树和森林 树的遍历实例 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 第 * 页 6.4 树和森林 树的遍历与二叉树遍历的关系 先序遍历 后序遍历 树 二叉树 森林 先序遍历 先序遍历 中序遍历 中序遍历 第 * 页 6.4 树和森林 例:由广义表建树 A C B D G F E H I J M L K ( A, ( B, (E, (K), (L)), (F) ), ( C, (G) ), (D, (H,(M)),(I),(J)) ) 根 子树1 子树2 子树3 A D C B 根 E firstchild nextsibling 第 * 页 6.4 树和森林 例:由广义表建树 A C B D G F E H I J M L K ( A, ( B, (E, (K), (L)), (F) ), ( C, (G) ), (D, (H,(M)),(I),(J)) ) 树根: Head(L) 根的第一个孩子: Head( tail(L) ) tail( tail(L) ) 根 根的第一个孩子 第一个孩子的下一个兄弟: Head( tail(tail(L)) ) 第 * 页 6.4 树和森林 void CreateTree( Tree t, GList L ) { Create root node t from head( L ); if ( tail(L) is not empty ) { curhead = head( tail(L) ); //表尾的头 curtail = tail( tail(L) ); //表尾的表尾 CreateTree( t-firstchild, curhead ); p = t-firstchild; while ( curtail ) // 若还有子树(表尾非空) { curhead = head( curtail ); // 下一个兄弟 curtail = tail( curtail ); CreateTree( p-nextsibling, curhead ); p = p-nextsibling; } p-nextsibling = NULL; } return; } T ( N ) = O( N ) A C B E curhead p curhead head 第 * 页 6.6 最优二叉树 路径:从一个祖先结点到子孙结点之间的分支构成这两个结点间的路径; 路径长度:路径上的分支数目称为路径长度; 结点的权:给树中结点所赋的具有物理意义的值; 结点的带权路径长度:从根到该结点的路径长度与该结点权的乘积。 第 * 页 6.6 最优二叉树 树的带权路径长度=树中所有叶子结点的带权路径之和;通常记作 WPL= ? wi ? Li。 哈夫曼树:假设有n个权值(w1,w2, … , wn),构造有 n 个叶子结点的二叉树,每个叶子结点有一个 wi 作为它的权值。则带权路径长度最小的二叉树称为哈夫曼树。 第 * 页 6.6 最优二叉树 实例 9 2 4 7 5 2 4 5 7 9 WPL(T) = 7?2+5?2+2?3+4?3+9?2 = 60 WPL(T) = 7?4+9?4+5?3+4?2+2?1 = 89 第 * 页 6.6 最优二叉树 构造Huffman树步骤 根据给定的n个权值 {w1, w2, ……wn},构造n棵只有根结点的二叉树,令其权值为wj 在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和。 在森林中删除这两棵树,同时将新得到的二叉树加入森林中。 重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树。 第 * 页 6.6 最优二叉树 实例 a 7 b 5 c

文档评论(0)

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

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

1亿VIP精品文档

相关文档