电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

27页
  • 卖家[上传人]:san****019
  • 文档编号:70816892
  • 上传时间:2019-01-18
  • 文档格式:PPT
  • 文档大小:445.51KB
  • / 27 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、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:数据域,存放该结点的数据信息; lc

      2、hild:左指针域,存放指向该结点左孩子的指针; 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); /

      3、层序遍历二叉树 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); /前

      4、序递归遍历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,层序遍历(广度

      5、优先遍历),遍历序列:,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

      6、 = 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 = Crea

      7、t(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 二叉树的存

      8、储结构及实现,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分享,可在线阅读,更多相关《叉树的存储结构(顺序二叉三叉》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.