网站大量收购独家精品文档,联系QQ:2885784924

《数据结构(C++版)(第二版)》第06章.ppt

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

(2)中序遍历线索二叉树算法 void Hbitree::inorder2 (Hbitree *t) { Hbitree *p; p=t; if (p!=NULL) { while (p-ltag==0) p=p-lchild; //找开始结点 while (p!=NULL) { cout p-data; p= inordernext(p); //调用函数找中序线索二叉树中的直接后继 } } } 从上面的算法可知,线索二叉树上的遍历较一般二叉树要方便得多,但是这种方便是以增加线索为代价的,增加线索本身要花费大量时间,所以二叉树是以二叉链表表示,还是以线索二叉链表表示,可根据具体问题而定。 3.线索二叉树的插入和删除 线索二叉树上的查找、遍历都较一般二叉树方便,但线索二叉树也存在其缺点,就插入和删除运算而言,线索二叉树比一般二叉树的时间花费大,因为除修改指针外,还要修改相应线索。 线索二叉树的插入和删除较麻烦,因此本书不再介绍算法,有兴趣的读者可以参考其他数据结构教材。 6.5 树和森林 6.5.1 树的存储结构 1.双亲表示法 它是以一组连续的存储单元来存放树中的结点,每个结点有两个域:一个是data域,存放结点信息,另一个是parent域,用来存放双亲的位置(指针)。 用C++描述如下: const int maxsize=maxlen //maxlen表示数组的最大长度 class node { public: elemtype data; int parent; }; node a[maxsize]; // 定义一维数组存放树中结点 该结构的具体描述见图6-21。 (a)树的结构 (b)树的双亲表示法 图6-21 树的双亲表示法示意图 2.孩子表示法 将一个结点的所有孩子链接成一个单链表形式,而树中有若干个结点,故有若干个单链表,每个单链表有一个表头结点,所有表头结点用一个数组来描述,具体描述参见图6-22,该存储结构的形式用C++描述如下: const int maxsize=maxlen //maxlen为数组的最大容量 class link { public: int clild; //孩子序号 link *next; //下一个孩子指针 }; class node { public: elemtype dada; //结点信息 link *next1; //头指针 }; node a[maxsize]; 图6-22 树(图6-21(a)中树)的孩子表示法示意图 3.双亲孩子表示法 将第1、2两种方法结合起来,则得到双亲孩子表示法,具体参见图6-23。 图6-23 树的双亲孩子表示法示意图 4.孩子兄弟表示法 类似于二叉链表,但第一根链指向第一个孩子,第二根链指向下一个兄弟。将图6-21(a)的树用孩子兄弟表示法表示,如图6-24所示。 图6-24 树的孩子兄弟表示法示意图 从上面提到的树的几种表示方法可知,双亲表示法求指定结点的双亲结点方便,求孩子结点不方便,孩子表示法求指定结点的孩子结点方便,求双亲结点不方便,孩子兄弟表示法求孩子结点和兄弟结点都方便。因此,在实际应用中,可根据问题的不同要求,选用不同的存储结构。 6.5.2 树、森林和二叉树的转换 1.树转换成二叉树 可以分为三步: (1)连线 指相邻兄弟之间连线。 (2)抹线 指抹掉双亲与除左孩子外其他孩子之间的连线。 (3)旋转 只需将树作适当的旋转。具体实现过程见图6-25。 图6-25 树转换成二叉树示意图 2.森林转换成二叉树 可以分为两步: (1)将森林中每一棵树分别转换成二叉树 这在刚才的树转换成二叉树中已经介绍过。 (2)合并 使第n棵二叉树接入到第n-1棵二叉树的根结点的右边并成为它的右子树,第n-1棵二叉树接入到第n-2棵二叉树的根结点的右边并成为它的右子树,……,第2棵二叉树接入到第1棵二叉树的右边并成为它的右子树,直到最后剩下一棵二叉树为止。 具体过程见图6-26。 图6-26 森林转换成二叉树示意图 3.二叉树还原成树或森林 (1)右链断开 将二叉树的根结点的右链及右链的右链等全部断开,得到若干棵无右子树的二叉树。 具体操作见图6-27(b)。 (2)二叉树还原成树 将(1)中得到的每一棵二叉树都还原成树(与树转换成二叉树的步骤刚好相反)。 具体操作步骤见图6-27(c)。 (a)一个森林得到的二叉树 (b)

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档