- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈夫曼树 与 树的应用 2008/04/08 中根次序(对称序)深度优先周游算法 非空头节点入栈; c = leftChild(c); if (c==NULL) 弹出栈顶,访问 c = rightChild(c); 直到栈空且c==NULL; 后根序深度优先遍历二叉树算法 先左子树 后右子树 然后根 后根次序周游算法 非空头节点入栈!; c = top(s); if (左子树为空) if ( 右子树也为空) c = pop(s); visit(c); else push( rightChild(c)); else push( leftChild(c)); 直到栈空; 非第归 后根序遍历二叉树 通过后缀表达式生成树 算法: 每个数字生成为一个叶结点,入栈。 算符生成为一个结点,弹出两个叶结点,先右后左,链接生成一棵子树,入栈。 直到表达式尾,弹出最后一个元素作为树根。 按对称序,先跟序周游的结果重建树 对称序 先跟序 DBEACF ABDECF Heap中删除最小元素 扩充二叉树的概念 把原二叉树的结点都变为度数为2的分支结点 如果原结点的度数为2,则不变 度数为1,则增加一个分支, 度数为0(树叶),则增加两个分支。 空二叉树的扩充二叉树规定为只有一个外部结点组成的二叉树。 加权路径: wi是第i个外部结点的权值 li为从根到第i个外部结点的路径长度 m为外部结点的个数。 WPL = 1 x 5 + 2 x 70 + 3 x 18 + 3 x 7 = 5 + 140 + 54 + 21 = 220 哈夫曼树: 对于一组非负实数{w1 , w2 , w3 ,…, wm},存在一棵以wi(i = 1,2,…,m)为权的m个外部结点的扩充的二叉树,使得带权的外部路径长度WPL最小。这棵二叉树就称为哈夫曼树或最优二叉树。 WPL = 1 x 70 + 2 x 18 + 3 x 5 + 3 x 7 = 70 + 36 + 15 +21 = 142 哈夫曼树(构建算法) 给定m个权值{ w1 , w2 ,…, wm } 构造由m棵二叉树组成的树林F = {T1,T2,…,Tm},其中每棵树Ti 只有一个根结点,且根结点的权值为wi; 在树林中选取两棵根结点权值最小的和次小的二叉树作为左右子树构造一棵新的二叉树,其根结点的权值为左右子树根结点权值之和。 将新的二叉树加入到树林F中,去除原两棵权值最小的树; 重复2、3步骤,直至F中只剩一棵树为止。 在线性结构上实现哈夫曼树 struct HtNode //* 哈夫曼树结点的结构 { int ww; int parent, llink, rlink;}; 哈夫曼树可定义为: struct HtTree { struct HtNode ht[MAXNODE]; int root;/* 树根在数组中的下标*/ };typedef struct HtTree *PHtTree; 哈夫曼算法(初始化) 问题分析: 优先队列的作用? 找最小值、次小值结点。 优先队列操作流程? 所有叶结点先入队。 弹出两个头部最小结点。 构造一棵子树。 子树头节点入队。 函数指针 函数指针顾名思义就是指向函数的指针。以同类型函数的地址作为值,可以通过间接访问运算来访问所指向的函数。 声明函数指针的格式: ?????? 类型 (*指针变量名)(参数列表); 函数指针的声明是基于函数声明的基础上,把函数名的部分替换为(*变量名)。 例子1: 例如: int (*fp) (int i,intj); 就声名了一个函数指针。该函数指针可以指向带两个整数变量且返回一个整数值的函数。 int add(int a, int b ) { return(a+b); } fp = add;???????????????????? //fp指向add函数 int i = (*fp)(12,15); 函数指针作为参数 在优先队列中引入函数指针 —— 提高抽象数据类型的通用性,实现软件分层 哈夫曼编码:在概率意义上平均码长最短 互不为子串? 树的存储表示 1. 树的父指针表示法? 用一组连续空间存储树的结点,每个结点有一个父结点,在每个
您可能关注的文档
最近下载
- 2025年江苏省初中学业水平考试(镇江市卷)中考英语试题含解析答案.pdf VIP
- 中核新能源人员行为安全“红黄线”管理办法(试行)培训考试试卷.docx
- 福建教育学院学前教育平时作业答案.docx VIP
- DB63T 662-2023高寒草地施肥技术规范.docx VIP
- 人教版2025秋小学数学三年级教学课件数量间的乘除关系连续两问的实际问题.pptx VIP
- 平行线专项证明题.doc VIP
- 人教版2025秋小学数学三年级教学课件数量间的乘除关系整理和复习.pptx VIP
- 2024年外泌体市场需求分析.pdf VIP
- 防城港市城市投资发展集团有限公司招聘笔试真题2024 .pdf VIP
- 人教版2025秋小学数学三年级教学课件数量间的乘除关系提问题、补条件.pptx VIP
文档评论(0)