- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构DS06-树要点
树的存储结构 树的结点之间的逻辑关系主要有双亲-孩子关系,兄弟关系。因为树是一种非线性结构,所以不能简单地用一维数组或单链表来存储树。为了存储树,必须把树中每个结点之间存在的关系反映在存储结构之中,才能如实地表现一棵树。因此,从结点之间的逻辑关系分,树的存储结构主要有:双亲表示法、孩子表示法、双亲孩子表示法和孩子兄弟表示法四种组合。 1、双亲表示法 该表示法要求用一维数组来存储树的有关信息,每个结点对应一个数组元素,它包括两个域:一个是数据域(data),用来存放该结点本身所包含的数据;一个是指针域(parent),用来指出该结点的父结点的位置。 在这种表示法下,树中结点的形式说明如下: #define MAX_TREE_SIZE 100 typedef struct { DataType data; int parent; }Node; Node tree[MAX_TREE_SIZE]; 为何要重点研究每结点最多只有两个 “叉” 的树? 二叉树的结构最简单,规律性最强; 可以证明,所有树都能转为唯一对应的二叉树,不失一般性。 问:具有3个结点的二叉树可能有几种不同形态? /*结点的结构体定义*/ typedef struct Node { DataType data; struct Node *leftChild; struct Node *rightChild; }BiTreeNode; 2.二叉树中给某结点插入一个左结点的操作 算法的基本思想: 若当前结点(假设为curr)非空,在curr的左子树插入元素值为x的新结点 ,原curr所指结点的左子树成为新插入结点的左子树。若插入成功返回新插入结点的指针,否则返回空指针。 3.删除二叉树中某结点的左子树操作 例:编写一个建立图7-7(b)所示的带头结点的二叉链存储结构二叉树的程序。 设计:假设上述二叉树结点结构体定义和二叉树操作实现函数存放在文件“Bitree.h”中,程序设计如下: #include stdlib.h #include stdio.h typedef char DataType; #include Bitree.h 注意:一个二叉树的遍历序列不能决定一棵二叉树,但先序(或后序)和中序遍历序列的组合可以惟一确定一棵二叉树。而先序和后序遍历则不能。 已知一棵二叉树的中序序列和后序序列分别是BDCEAFHG 和 DECBHGFA,请画出这棵二叉树。 分析: ①由后序遍历特征,根结点必在后序序列尾部(即A); ②由中序遍历特征,根结点必在其中间,而且其左部必全部是左子树的子孙(即BDCE),其右部必全部是右子树的子孙(即FHG); ③继而,根据后序中的DECB子树可确定B为A的左孩子,根据HGF子串可确定F为A的右孩子;以此类推。 例:画出以下二叉树对应的中序线索二叉树。 例:给定如图所示二叉树T,请画出与其对应的中序线索二叉树。 森林转换成二叉树 将各棵树分别转换成二叉树 将每棵树的根结点用线相连 以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构 构造Huffman树的基本思想: 构造Huffman树步骤 根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树森林,令其权值为wj 在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和 在森林中删除这两棵树,同时将新得到的二叉树加入森林中 重复上述两步,直到只含一棵树为止,这棵树即为所求的哈夫曼树 Huffman编码举例 w={ 7, 19, 2, 6, 32, 3, 21, 10 }在机内存储形式为: 二、森林的遍历 若森林非空,则遍历方法为: 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
您可能关注的文档
- 数据挖掘与应用(十一).ppt
- 中美轮胎特保案小组.ppt
- 数据挖掘算法介绍.ppt
- 油轮安全知识(PP).ppt
- 数据结构-堆排序.ppt
- 数据结构6树和二叉树A.ppt
- 法制安全在我心2016.11.6.pptx
- 数据结构与算法第二版2-4章答案.doc
- 数据结构作业二.docx
- 数据结构关系数据理论(原理).ppt
- Unit4MyFavoriteSubjectSectionA(1a-Pronunciation)(课件)人教版七年级英语上册.pptx
- Unit4NaturalDisastersListeningandSpeaking课件-高中英语人教版.pptx
- Unit4NaturalDisastersReadingandThinking课件高中英语人教版(1).pptx
- Unit4MyFavouriteSubjectSectionApronunciation课件-人教版七年级英语上册.pptx
- Unit4MyFavouriteSubjectSectionB(1a-1d)(教学课件)人教版英语七年级上册.pptx
- Unit4Lesson1课件冀教版七年级英语上册.pptx
- Unit4Lesson3课件冀教版英语七年级上册.pptx
- Unit4NaturalDisasters词汇笔记清单-高一上学期英语人教版.docx
- Unit4Lesson2课件冀教版英语七年级上册.pptx
- Unit4IusedtobeafraidofthedarkSectionAGrammarFocus-4c课件人教版(2012)九年级英语全册.pptx
文档评论(0)