- 1、本文档共221页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6 树和二叉树 树的类型定义 二叉树的类型定义 二叉树的存储结构 遍历二叉树和线索二叉树 树和森林 赫夫曼树 为何要重点研究每结点最多只有两个“叉” 的树? 树太一般,子树的个数无限制,表示困难 二叉树的结构最简单,规律性最强 可以证明,所有树都能转为唯一对应的二叉树,不失一般性。 二叉链表结点结构的定义 typedef int datatype; typedef struct node { datatype data; struct node *lchild,*rchild; }bitree; 原则 若被遍历的二叉树为空,则空操作 否则 1.访问根结点 2.以前序遍历原则遍历根结点的左子树 3.以前序遍历原则遍历根结点的右子树 算法: Status LevelOrderTraverse (biTree *T) {InitQueue(Q); AddQueue(Q,T); //树根入队 while(!QueueEmpty(Q)) //只要队列非空 { DeleteQueue(Q,p); //出队一个结点 if(!Visit(p-data)) return ERROR; //访问之 if(p-lchild) AddQueue(Q,p-lchild); //左孩子入队 if(p-rchild) AddQueue(Q,p-rchild); //右孩子入队 } return OK; } 一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( )。 A. CABDEFG B. ABCDEFG C. DACEFBG D. ADCFEGB 一棵非空的二叉树的前序序列和后序序列正好相反,则该二叉树一定满足( )。 A. 其中任意一个结点均无左孩子 B. 其中任意一个结点均无右孩子 C. 其中只有一个叶子结点 D. 其中度为2的结点最多为一个 E. 空或只有一个结点 F. 高度等于其结点数 typedef int datatype; typedef struct node { datatype data; struct node *lchild,*rchild; int ltag,rtag; } bithptr; 例:在中序线索二叉树中查找结点p的后继结点 以后序线索二叉树为例 第一个访问的应该是最左下角的结点(假设为p),p的后继是谁? 中序的前驱和后继都往上指向祖先 还可以增加双亲信息(孩子-双亲表示法) 双亲表示法 树中一个结点的孩子的数量不定 但是双亲却只有一个 所以保存每个结点的双亲 即左孩子、右兄弟表示法 用二叉树来表示树 左指针指向其大儿子 右指针指向其兄弟 森林的前序遍历相当于对每棵树依次进行树的前根遍历:(1)(2)(3) 森林的前序遍历 = 等价二叉树的前序遍历 森林的后序遍历 = 等价二叉树的中序遍历 以下我们只讨论二叉树 问题: 树的路径长度最短的是哪一种? 完全二叉树 权(weight) 给结点赋予一定的数值 结点的带权路径长度 从树根到该结点的路径长度×该结点的权 树的带权路径长度 Weighted Path Length 所有叶结点的带权路径长度之和 WPL = 例:计算下列二叉树的WPL值 最优二叉树(又称赫夫曼树) 已知有n个权值{w1,w2,...,wn} 构造一棵有n个叶结点的二叉树,每个叶结点的权值为wi 其中WPL最小的那一棵称作最优二叉树,即赫夫曼树 最优又能怎样? 例:一个判断成绩等级的程序 if(a 60) b = “不及格” else if(a 70) b = “及格” else if(a 80) b = “中等” else if(a 90) b = “良好” else b = “优秀” 假设有如下统计数据 原判定树为: 构造一棵赫夫曼树 有5个叶结点,权值分别为: 0.05(不及格), 0.15(及格), 0.4(中等),0.3(良好), 0.1(优秀) 根据这棵赫夫曼树导出新的判定树: 五、线索二叉树 叶子的指针的闲置 只有一个孩子的结点也有一个指针闲置 因此利用它来帮助遍历 遍历的算法是要会写 一些不足也要知道 前序/后序线索二叉树难以找后继/前驱结点 因为二叉链表找父亲不方便 六、树和森林 树的表示方法多样 各种方法的各有优劣 要求手工能画出来就可以了 树、森林??二叉树相互转化 树和森林的遍历要注意 方法和二叉树有点儿不同 七、赫夫曼树 赫夫曼树的相关概念 手
您可能关注的文档
- 第九节行驶系2检测与诊断.ppt
- 第九章 标准成本.ppt
- 第九章 非铁金属及硬质合金.ppt
- 第九章 技术指标.ppt
- 第九章 具体行政行为.ppt
- 第九章 劳动监察制度.ppt
- 第九章 物价变动会计.ppt
- 第九章 物流企业形象策略.ppt
- 第九章 保险产品定价.ppt
- 第九章 并行接口.ppt
- 2024年沧州市公务员考试行测真题及答案详解(名师系列).docx
- 粮油食品检验人员复习提分资料带答案详解(精练).docx
- 粮油食品检验人员自我提分评估(考点精练)附答案详解.docx
- 粮油食品检验人员全真模拟模拟题附参考答案详解(精练).docx
- 2025年延安市公务员考试行测试卷历年真题附答案详解(突破训练).docx
- 2025年株洲市公务员考试行测试卷历年真题含答案详解.docx
- 2024年枣庄市公务员考试行测真题及完整答案详解1套.docx
- 2024年抚顺市公务员考试行测真题及答案详解(各地真题).docx
- 2025年常州市公务员考试行测真题及一套参考答案详解.docx
- 2023年德州市公务员考试行测试卷历年真题及1套完整答案详解.docx
文档评论(0)