电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

叉树的存储结构(顺序二叉三叉

  • 资源ID:70816892       资源大小:445.51KB        全文页数:27页
  • 资源格式: PPT        下载积分:16金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要16金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

叉树的存储结构(顺序二叉三叉

2012,辽宁科技大学软件学院,1,顺序存储结构,用一维数组存储二叉树中的结点,且结点的存储位置(下标)应能体现结点之间的逻辑关系父子关系。,如何利用数组下标来反映结点之间的逻辑关系?,完全二叉树中结点的序号体现孩子、双亲之间的逻辑关系 。,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,2,完全二叉树的存储,A,B,C,D,E,F,G,H,I,J,按编号 顺序存,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,3,一般二叉树的存储,A,B,C,D,F,G,E,按编号 顺序存,按照完全 二叉树编号,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,4,一棵斜树的顺序存储会怎样呢?,深度为k的右斜树,k个结点需分配2k1个存储单元。,一棵二叉树改造成完全二叉树形态,需要增加很多空结点,造成存储空间的浪费。,二叉树的顺序存储一般仅适合于存储完全二叉树,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,5,二叉链表,基本思想: 令二叉树的每个结点对应一个二叉链表结点。,结点结构:,其中,data:数据域,存放该结点的数据信息; lchild:左指针域,存放指向该结点左孩子的指针; rchild:右指针域,存放指向该结点右孩子的指针。,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,6,二叉链表,具有n个结点的二叉链表中,有多少个空指针?,n+1,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,7,template struct BiNode DataType data; BiNode *lchild, *rchild; ;,二叉链表结点的描述,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,8,二叉链表存储结构的类声明,template class BiTree public: /构造函数,建立一棵二叉树 BiTree( )root = Creat(root); /析构函数 BiTree( )Release(root); /前序遍历二叉树 void PreOrder( )PreOrder(root); /中序遍历二叉树 void InOrder( )InOrder(root); /后序遍历二叉树 void PostOrder( )PostOrder(root); /层序遍历二叉树 void LeverOrder( );,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,9,二叉链表存储结构的类声明,private: /指向根结点的头指针 BiNode *root; /构造函数调用 BiNode *Creat(BiNode *bt); /析构函数调用 void Release(BiNode *bt); /前序遍历函数调用 void PreOrder(BiNode *bt); /中序遍历函数调用 void InOrder(BiNode *bt); /后序遍历函数调用 void PostOrder(BiNode *bt); ;,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,10,前序遍历递归算法,template void BiTree : PreOrder(BiNode *bt) if (bt = NULL) return; /递归调用的结束条件 else cout data; /访问根结点bt的数据域 PreOrder(bt-lchild); /前序递归遍历bt的左子树 PreOrder(bt-rchild); /前序递归遍历bt的右子树 ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,11,中序遍历递归算法,template void BiTree : InOrder (BiNode *bt) if (bt = NULL) return; /递归调用的结束条件 else InOrder(bt-lchild); /中序递归遍历bt的左子树 cout data; /访问根结点bt的数据域 InOrder(bt-rchild); /中序递归遍历bt的右子树 ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,12,后序遍历递归算法,template void BiTree : PostOrder(BiNode *bt) if (bt = NULL) return; /递归调用的结束条件 else PostOrder(bt-lchild); /后序递归遍历bt的左子树 PostOrder(bt-rchild); /后序递归遍历bt的右子树 cout data; /访问根结点bt的数据域 ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,13,层序遍历(广度优先遍历),遍历序列:,A,A,B,C,B,D,C,E,F,G,D,E,F,G,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,14,层序遍历,队列Q初始化; 2. 如果二叉树非空,将根指针入队; 3. 循环直到队列Q为空 3.1 队列Q的队头元素出队,q指向队头结点; 3.2 访问结点q的数据域; 3.3 若q-lchild非空,则将其入队; 3.4 若q-rchild非空,则将其入队;,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,15,template void BiTree : LeverOrder( ) front = rear = -1; /采用顺序队列,并假定不会发生上溢 if (root = NULL) return; /二叉树为空,算法结束 Q+rear = root; /根结点入队 while (front != rear) /当队列非空时 q = Q+front; /出队 cout data; if (q-lchild != NULL) Q+rear = q-lchild; if (q-rchild != NULL) Q+rear = q-rchild; ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,16,二叉树的建立,为了建立一棵二叉树,将二叉树中每个结点的空指针引出一个虚结点,其值为一特定值如“#”,以标识其为空,(每个结点都有左右孩子)把这样处理后的二叉树称为原二叉树的扩展二叉树。,为什么如此处理?,如何由一种遍历序列生成该二叉树?,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,17,扩展二叉树的前序遍历序列: A B # D # # C # #,二叉树的建立,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,18,设二叉树中的结点均为一个字符。假设扩展二叉树的前序遍历序列由键盘输入,root为指向根结点的头指针,二叉链表的建立过程是: 首先输入根结点,若输入的是一个“#”字符,则表明该二叉树为空树,即bt=NULL;否则输入的字符应该赋给bt-data,之后依次递归建立它的左子树和右子树 。,二叉树的建立,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,19,template BiTree : BiTree( ) root = Creat(root); template BiNode *BiTree:Creat(BiNode *bt) cin ch; /输入结点的数据信息,假设为字符 if (ch = '# ') bt = NULL; /建立一棵空树 else bt = new BiNode; bt-data = ch; /生成一个结点,数据域为ch bt-lchild = Creat(bt-lchild); /递归建立左子树 bt-rchild = Creat(bt-rchild); /递归建立右子树 return bt; ,建立二叉树递归算法,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,20,遍历二叉树是二叉树各种操作的基础,遍历算法中对每个结点的访问操作可以是多种形式及多个操作,根据遍历算法的框架,适当修改访问操作的内容,可以派生出很多关于二叉树的应用算法。,void InOrder (BiNode *root) if (root=NULL) return; else InOrder(root-lchild); coutdata; InOrder(root-rchild); ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,21,设计算法求二叉树的结点个数。,int Count(BiNode *root) if (!root) return 0; else return Count(root-lchild) +Count(root-rchild)+1; ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,22,设计算法按前序次序打印二叉树中的叶子结点。,void PreOrder(BiNode *root) if (root) if (!root-lchild ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,23,设计算法求二叉树的深度。,int Depth(BiNode *root) if (root= =NULL) return 0; else hl= Depth(root-lchild); hr= Depth(root -rchild); return max(hl, hr)+1; ,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,24,三叉链表,在二叉链表中,如何求某结点的双亲?,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,25,三叉链表,在二叉链表的基础上增加了一个指向双亲的指针域。,结点结构,其中:data、lchild和rchild三个域的含义同二叉链表的结点结构; parent域为指向该结点的双亲结点的指针。,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,26,三叉链表,5.4 二叉树的存储结构及实现,2012,辽宁科技大学软件学院,27,三叉链表的静态链表形式,5.4 二叉树的存储结构及实现,

注意事项

本文(叉树的存储结构(顺序二叉三叉)为本站会员(san****019)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.