数据结构——基于Python语言(微课版) 课件T17_树(转换、构建与线索化).pptx

数据结构——基于Python语言(微课版) 课件T17_树(转换、构建与线索化).pptx

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

转换、构建与线索化第八章:树主讲:周翔

树与二叉树的相互转换树与二叉树的相互转换ABEDCDECAB??????孩子兄弟表示法

树与二叉树的相互转换树与二叉树的相互转换ABEDCECAB?D?????二叉链表

树与二叉树的相互转换树转化为二叉树方法1:将树的孩子兄弟表示法看成是二叉树的二叉链表存储结构,即可实现转化。方法2:树中所有相邻兄弟之间加一条连线;对树中的每个结点,只保留其与第一个孩子结点之间的连线,删去其与其他孩子结点之间的连线;以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。

树与二叉树的相互转换ABGECFDHABDECFGHABDECFGH

树与二叉树的相互转换将此二叉树还原为树ABDEFGHIJKMLC

树与二叉树的相互转换第一步:加线(虚线),将树中每条右链中的所以右孩子都连接到右链链头结点的父结点上;ABDEFGHIJKMLC

树与二叉树的相互转换第二步是去线,将原二叉树中父结点与其右孩子的连线抹去;ABDEFGHIJKMLC

树与二叉树的相互转换第三步整理,去掉原二叉树中的连接线后,将新的连接线由虚线变为实线,调整树中结点的层次结构;ABDEFGHIJKMLCABDEFGHIJKMLC

树、森林与二叉树的相互转换森林转化为二叉树的方法将森林中的每棵树转换成对应的二叉树;每一棵二叉树不动,从第二棵二叉树开始,依次将后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子;当所有二叉树连在一起后,所得到的二叉树就是由森林转换得到的二叉树。

树、森林与二叉树的相互转换ABDCEFGHIJABDCEFGHIJ

树、森林与二叉树的相互转换ABDCEFGHIJABDCEFGHIJ

树、森林与二叉树的相互转换二叉树还原为森林或树的方法若某结点是其双亲结点的左孩子,则把该结点的右孩子、右孩子的右孩子……都与该结点的双亲结点用线连起来;删掉原二叉树中所有双亲结点与右孩子结点的连线;整理前两步所得到的树或森林,使之结构层次分明。

树、森林与二叉树的相互转换ABDCEFGHIJABDCEFGHIJ

二叉树的构建——中序和先序中序和先序构建二叉树想要通过遍历结果来确定一棵树需要将两种顺序的遍历结果结合起来。结合方案有以下两种:中序遍历结果和先序遍历结果一起可以确定一棵二叉树;中序遍历结果和后序遍历结果一起可以确定一棵二叉树;即便结合先序遍历和后序遍历的结果也无法确定一棵二叉树的的结构,因为这两种遍历结果结合只能求解出根,不能确定左子树什么时候结束,右子树什么时候开始。

二叉树的构建——中序和先序中序和先序构建二叉树根据中序遍历和先序遍历结果确定二叉树结构的基本思路如下:(1)通过先序遍历找到根结点,再通过根节点在中序遍历的位置找出左子树、右子树;(2)根据左子树在先序遍历结果的顺序,找到左子树的根结点,视左子树为一棵独立的树,转步骤(1);(3)根据右子树在先序遍历结果的顺序,找到右子树的根结点,视右子树为一棵独立的树,转步骤(1);

二叉树的构建——中序和先序中序和先序构建二叉树假如有一棵二叉树,它的先序遍历结果为:ADEBCF;中序遍历结果为:DEACFB。则确定此二叉树的步骤如下:第一步:由先序遍历结果可知,此二叉树的根结点为A;再结合中序遍历结果,可知A的左子树为DE,右子树为CFB;

二叉树的构建——中序和先序中序和先序构建二叉树假如有一棵二叉树,它的先序遍历结果为:ADEBCF;中序遍历结果为:DEACFB。则确定此二叉树的步骤如下:第二步:A的左子树中包含有DE两个结点,由先序遍历结果可知,D结点在E的前面,那么D是左子树的根结点;又因在中序遍历中,E结点在根结点D之后,先遍历D后遍历E,说明D是根结点,E是D的右孩子;

二叉树的构建——中序和先序中序和先序构建二叉树假如有一棵二叉树,它的先序遍历结果为:ADEBCF;中序遍历结果为:DEACFB。则确定此二叉树的步骤如下:第三步:由整棵树的先序遍历结果可知右子树的先序遍历结果为:CFB,因此B是右子树的根结点;又因为在中序遍历中,CF都在B之前,说明C、F是B的左子树结点;对以B为根节点的子树继续分析:在先序遍历中,C在F的前面,说明在B的左子树中,C是根结点;在中序遍历中:F在C的后面,说明F是C的右孩子;

二叉树的构建——中序和先序中序和先序构建二叉树这三个步骤分别确定了二叉树的根结点、左子树与右子树,这样就确定了一棵二叉树。

二叉树的构建——中序和先序已知一棵二叉树的以下两种遍历结果,试画出这棵二叉树。前序遍历的结果是ABECDFGHIJ中序遍历的结果是EBCDAFHIGJABCEDFGIHJ

二叉树的构建——中序和先序一棵二叉树前序遍历和中序遍历序列如下所示:前序:DACEBHFGI;中序:DCBEHAGIF;试画出二叉树结构,并简述求算

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档