chapt6树与二叉树3.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chapt6树与二叉树3

数据结构与算法 树与二叉树 在本章前面的内容中,我们首先讲解了树的定义,然后就过渡到对二叉树的讲解,包括二叉树的定义、存储结构、基本操作(遍历)等等问题。 其实,二叉树是树的特例,对于树,也会有存储和基本操作。 下面我们就来讲解树的相关问题,包括:树的存储结构、树的基本操作(遍历)、树与二叉树的转化 目录 树的存储结构 树、森林与二叉树的转化 树的遍历 应用举例:哈夫曼树 树的存储结构 双亲表示法 在树中,每个结点的双亲是唯一的,利用这个性质,可以在存储节点信息同时,为每个结点设置一个指向其双亲的指针,这样就能唯一的表示一棵树了。 数据结点表示:数据元素域,双亲结点指针域 物理存储方式:顺序表或者链表 (下面用顺序表为例,使用一组连续的存储单元来存放树中的结点) 注意:双亲表示法(以及后面讲的孩子表示法、双亲孩子表示法)是对树这种结构的一种逻辑表示法,对应于具体的物理存储方式可以使用顺序表也可以使用链表,要注意区分逻辑表示和物理存储的差别。 树的存储结构 双亲表示法 const MAX_TREE_SIZE = 100; typedef struct {        // 结点结构   ElemType data;   int parent;         // 双亲位置域  } PTNode; typedef struct {      // 树结构  PTNode nodes[MAX_TREE_SIZE];  int r, n;         // 根的位置和结点数  } PTree; 树的存储结构 双亲表示法 好处:有利用于“向上”查找 (利用结点双亲的唯一性)。 不利:“向下”查找需遍历全部存储结点。 树的存储结构 孩子表示法 孩子表示法主要描述的是结点的孩子关系。 由于每个结点的孩子个数不定,所以在每个结点上设置多个指向孩子的指针域(称作多重孩子域)的方式是不合适的。这种方法不但不能确定要设置多少个指针域,而且会浪费空间。 如何表示孩子更好呢? 树的存储结构 孩子表示法 为树中所有结点建立一个线性表,用一个地址连续的存储空间来存储,数组中每个元素2个域,一个数据域(存放结点的数据),一个指针域(指向该结点的所有孩子组成的单链表的表头) 为每个结点的所有孩子结点都建立一个线性表,且以单链表作它的存储结构,单链表中每个元素2个域,一个数据域(存放该孩子在结点数组中的下标),一个指针域(指向下一个孩子结点)。 树的存储结构 孩子表示法 typedef struct CTNode {  // 孩子结点 int child; struct CTNode *next; } *ChildPtr;   typedef struct { ElemType data;   // 结点的数据元素 ChildPtr firstchild; // 孩子链表头指针 } CTBox;    typedef struct { CTBox nodes[MAX_TREE_SIZE]; int n, r;     // 结点数和根结点的位置 } CTree; 树的存储结构 孩子表示法 优点:寻找某个结点的孩子比较容易 缺点:寻找双亲比较麻烦 树的存储结构 孩子双亲表示法 将双亲表示法和孩子表示法结合起来,即将一维数组元素增加一个表示双亲结点的域parent,用来指示结点的双亲在一维数组中的位置。 这样查找孩子和双亲就都很方便了。 树的存储结构 孩子兄弟表示法 树的存储结构还有一种方法:孩子兄弟表示法。下面我们简要介绍一下这种方法。这种方法将引出下一个问题:树与二叉树的转化问题。 孩子兄弟表示法也是一种链式存储结构。它通过描述每个结点的一个孩子和兄弟信息来反映结点之间的层次关系,其结点结构为: firstchild为指向该结点第一个孩子的指针 nextsibling为指向该结点的下一个兄弟 item是数据元素内容 树的存储结构 孩子兄弟表示法 typedef struct CSNode{ EntryType item; struct CSNode *firstchild,*nextsibling; }CSNode,*CSTree; 目录 树的存储结构 树、森林与二叉树的转化 树的遍历 应用举例:哈夫曼树 树、森林与二叉树的转化 在树或森林与二叉树之间有一一对应关系 任何一个树可以唯一的转化为一个二叉树 任何一个森林可以唯一的转化为一个二叉树 任何一个二叉树都可以唯一的转化为一个树或者森林 下面来看: 树转化为二叉树的方法 森林转

文档评论(0)

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

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

1亿VIP精品文档

相关文档