- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机科学与工程系 计算机科学与工程系 第六章 树与二叉树 树的定义与基本术语 二叉树 二叉树遍历 线索化二叉树 森林与二叉树的转换 哈夫曼树 (Huffman Tree) 6.1 树的定义与基本术语 2) 基本术语 结点(node): 结点的度/ 树的度(degree)): 叶子(leaf)结点/分支(branch)结点 孩子/子女(child)结点:某结点子树的根 双亲(parent)结点:某个结点是其子树根的双亲 6.2 二叉树 (Binary Tree) 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 2)链式存储 6.2.4 二叉树基本操作及其实现 6.3 二叉树的遍历 1)递归算法的实现 前序遍历 (Preorder Traversal) 前序遍历二叉树算法的框架是 若二叉树为空,则空操作; 否则 访问根结点 (D); 前序遍历左子树 (L); 前序遍历右子树 (R)。 遍历结果 - + a * b - c d / e f 中序遍历 (Postorder Traversal) 中序遍历二叉树算法的框架是: 若二叉树为空,则空操作; 否则 中序遍历左子树 (L); 访问根结点 (D); 中序遍历右子树 (R)。 遍历结果 a + b * c - d - e / f 后序遍历 (Postorder Traversal) 后序遍历二叉树算法的框架是 若二叉树为空,则空操作; 否则 后序遍历左子树 (L); 后序遍历右子树 (R); 访问根结点 (D)。 遍历结果 a b c d - * + e f / - 2)非递归算法的实现 以中序遍历为例, 介绍非递归算法的实现 基本思想:找到每个结点,先进栈,后访问——根结点先进栈,有左孩子左孩子进栈,至无左孩子时出栈并访问;再访问根;有右孩子右孩子进栈,至无右孩子时出栈并访问。简单说:每个结点先进栈,退栈时访问(进栈顺序左-中-右) 6.3.2 线索化二叉树(Threaded Binary Tree) 2) 线索二叉树的结构 3) 中序线索化算法 线索化过程 整棵树的中序线索化 4) 线索化二叉树上常用运算 6.4 树与森林 6.4.2 森林与二叉树的转换 6.4.3 树与森林的遍历 6.5 哈夫曼树(Huffman Tree)及其应用 6.5.1 最优二叉树(Huffman Tree) 6.5.2 哈夫曼树应用举例 2) 哈夫曼树在判定问题中的应用 6.6 二叉树的计数 本章小结 二叉树 二叉树定义、基本运算 二叉树性质 二叉树存储结构(顺序存储、二叉链表) 二叉树的遍历、线索化 树 树的定义 树的存储结构 树、森林与二叉树的转换 哈夫曼树 哈夫曼树的构造方法 哈夫曼编码 带权路径长度的计算 例如,有3个数据{1,2,3},可得5种不同的二叉树。它们的前序排列均为123,中序序列可能是123,132,213,231,321。 有0个, 1个, 2个, 3个结点的不同二叉树如下 例如,具有4个结点的不同二叉树 计算具有 n 个结点的不同二叉树的棵数 Catalan函数 如何区别某结点的指针域内存放的是指针还是线索?通常可以采用下面两种方法来实现。 为每个结点增设两个标志位域 ltag 和 rtag 规定: ltag= 0 lchild指向结点的左孩子 1 lchild指向结点的前驱结点 rtag= 0 rchild指向结点的右孩子 1 rchild指向结点的后继结点 线索二叉树数据类型描述: Typedef struct BiThrNode { elemtype data; struct BiThrNode *lchild, *rchild; unsigned ltag:1, rtag:1; // 1:线索;0:指针 } BiThrNode, *BiThrTree; 线索化实质是在遍历过程中将二叉链表中的空指针改为指向前驱或后继的线索,即在遍历过程中修改指针的过程——穿线。 在遍历过程中,如果当前结点的左、右指针域是否为空,将它们改为指向前驱结点或后继结点的线索。 在对一棵二叉树加线索时,必须首先申请一个头结点,建立头结点与二叉树的根结点的指向关系,对二叉树线索化后,还需建立最后一个结点与头结点之间的线索。 void InTreading (BiThrTree p) { /*中序遍历进行中序线索化*/ if (p) { InThreading(p-lchild); /*
您可能关注的文档
最近下载
- 园长研修总结(3篇).docx VIP
- 东证期货-商品基本面量化框架系列-二-:黄金择时因子及多周期合成.pdf VIP
- 2024年9月8日贵州省黔西南州州直遴选(事业单位考聘)笔试真题及答案解析.doc VIP
- 安徽省综合评标评审专家入库、续聘考试试题(含答案).docx VIP
- 第2章金属材料组织-4-清华大学-工程材料.ppt VIP
- 第2章金属材料组织-3-清华大学-工程材料.ppt VIP
- 2025政治理论时政热点知识试题库(含+答案).docx VIP
- 2025人民防空防护设备产品选型目录.docx VIP
- 第2章金属材料组织-1-清华大学-工程材料.ppt VIP
- Unit 4 Plants around us课件(63张PPT)三年级上册(2024版).pptx VIP
文档评论(0)