- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构3(树形结构)
裂项法求解数列。 * 非递归实现:中序遍历 思想 遇到一个节点,就把它推入栈中,并去遍历它的左子树;注意:此时不访问 遍历完左子树后,从栈顶托出这个节点并访问之,然后按照它的右链接指示的地址再去遍历该节点的右子树。 节点扩展标记位 在二叉树node结构里增加1个标记位tag记录该节点状态,初始时:tag=0。 tag=0,表示左子树未访问; tag=1,表示左子树已经访问,该访问自己了。 data Rchild Lchild tag typedef struct BiTNode { ElemType data; struct BiTNode *Lchild, *Rchild; // 左、右孩子指针 int tag=0; } *BiTree; 非递归实现:中序遍历伪代码 非递归实现:后序遍历 思想 遇到一个节点,把它推入栈中,遍历它的左子树; 遍历结束后,还不能马上访问处于栈顶的该节点,而是要再按照它的右链接结构指示的地址去遍历该节点的右子树; 遍历遍右子树后才能从栈顶托出该节点并访问之。 tag语义略微发生变化 tag=0,表示左右子树均未访问; tag=1,表示左子树已经访问,该访问右子树了; tag=2,表示左右子树均已经访问,该访问自己了。 非递归实现:后序遍历伪代码 树遍历非递归算法总结 非递归算法的写法有很多种,我们只是用统一的框架来描述了这三种遍历 进栈出栈操作,出栈过程,我们根据需要设置标记位来表明该节点的左(或右)子树是否被遍历。 希望同学们理解并熟记该框架,很多应用问题只需要改变Visit(p)操作就可以实现。 二叉树遍历应用举例(1) 统计二叉树中叶子节点的数量 容易想到,实现这个操作只要对二叉树遍历一遍,并在遍历过程中对叶子节点计数即可。显然这个遍历的次序可以随意,即先序或中序或后序均可,只是为了在遍历的同时进行计数,需要在算法的参数中设一个计数器。 统计二叉树中非叶子节点的数量 void CountLeaf (BiTree T, int count) { // 先序遍历二叉树,以 count 返回二叉树中叶子节点的数目 if ( T ) { if ((!T-Lchild) (!T-Rchild)) count++; // 对叶子节点计数 CountLeaf( T-Lchild, count); CountLeaf( T-Rchild, count); } // if } // CountLeaf 二叉树遍历应用举例(2) 求二叉树的深度和高度 任何遍历均可,每下去一层,深度加1,但是,注意,将当前最大深度保存下来。 int maxdepth=-1; //当前最大深度 void BiTreeDepth(BiTree T, int depth) { // T指向二叉树的根,depth 为 T 所指节点所在层次,初值为0 if (T){ if (depthmaxdepth) maxdepth=depth; BiTreeDepth(T-Lchild, depth+1); BiTreeDepth(T-Rchild, depth+1); }// if }// BiTreeDepth //全局变量maxdepth最终保存的就是树的深度 二叉树遍历应用举例(3)-1 输出二叉树中每一棵树中从根到所有叶子节点的路径 从树的根节点出发,沿着各个分支可以到达所有叶子节点,由途径所有节点构成的节点序列称为从根到叶的路径,途径分支个数称作路径长度; 用递归算法就很难实现了,因为,递归算法不保存中间状态。 输出路径: A D F A D G K 二叉树遍历应用举例(3)-2 回忆后序遍历的非递归算法 当Visit(p)时,p的节点的所有祖先一定都在栈中,因为,后序决定子节点在父节点之前被访问,因此,p被访问时,他的所有父节点都未被访问,因此,必然在栈中。 据此,我们很容易修改Visit(p)函数解决这一问题: 判断p是否为叶节点,即p-Lchild==NULL p-Rchild==NULL,若是,反序打印栈中所有节点,即为根到p的路径。 留为作业,请同学们至少写出伪代码,最好上机验证。 广度优先遍历二叉树 上述三种遍历本质上是深度优先遍历。 广度优先遍历:从二叉树的第一层(根节点)开始,自上至下逐层遍历;在同一层中,按照从左到右的顺序对节点逐一访问。 例如:ABCDEFGHI 广度优先遍历实现方式 广度优先遍历没有递归实现方法,非递归实现依赖于队列 下一章,图的广度遍历也是如此! 广度优先遍历二叉树:伪代码 与先序遍历非递归代码比较,区别有哪些? 提纲 二
您可能关注的文档
- 数值分析考试复习总结.doc
- 数值分析第一张,引言.ppt
- 数值分析第8章——矩阵特征值问题计算.ppt
- 数值分析高级课件_1误差.ppt
- 数值计算实习报告-牛顿插值算法(高分).doc
- 数值计算 第一章 绪论.ppt
- 教育技术与数学探究.ppt
- 数值分析考试卷及详细答案解答.doc
- 数值分析第九章常微分方程数值解法.ppt
- 教育学--教育与人的发展.ppt
- 2025甘肃定西市渭源县社区工作者招聘10人笔试备考题库带答案解析.docx
- 2025海南保亭黎族苗族自治县卫生系统招聘事业编制及员额制工作人员笔试备考试卷(第7号)附答案解析.docx
- 2026中国电力科学研究院有限公司高校毕业生招聘200人备考题库带答案解析.docx
- 2026福建省面向重庆大学选调生选拔笔试备考题库及答案解析(夺冠).docx
- 2026年中国银联校园招聘145人笔试题库附答案解析.docx
- 2025贵州毕节市退役军人事务局招聘公益性岗位人员3人笔试备考试卷附答案解析.docx
- 2025河南郑州豫象融汇文化产业责任有限公司招聘7人历年参考题库附答案解析.docx
- 2025福建漳州市南靖生态环境局招聘1人历年真题题库及答案解析(夺冠).docx
- 2026 “梦想靠岸”招商银行东莞分行冬季校园招聘参考题库含答案解析(必刷).docx
- 2025河南许昌市东城区招聘工作人员6人历年题库带答案解析.docx
有哪些信誉好的足球投注网站
文档评论(0)