- 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. 后序遍历非递归算法 (2)第二种方法(常规方法) 由后遍历过程可知,采用一个栈保存需要返回的结点指针,先扫描根结点的所有左结点并一一进栈,出栈一个结点*b即当前结点,然后扫描该结点的右孩子结点并入栈,再扫描该右孩子结点的所有左结点并入栈。当一个结点的左右孩子结点均访问后再访问该结点,如此这样,直到栈空为止。 难点:如何判断一个结点*b的右孩子结点已访问过,为此用p保存刚刚访问过的结点(初值为NULL),若b-rchild==p成立(在后序遍历中,*b的右孩子结点一定刚好在*b之前访问),说明*b的左右子树均已访问,现在应访问*b。 void PostOrder2(BTNode *b) { BTNode *St[MaxSize];BTNode *p; int flag,top=-1; //栈指针置初值 do { while (b!=NULL) //将*b的所有左结点进栈 { top++; St[top]=b; b=b-lchild; } p=NULL; //p指向栈顶结点的前一个已访问的结点 flag=1; //设置b的左孩子为已访问过 找最左下结点 while (top!=-1 flag==1) { b=St[top]; //取出当前的栈顶元素 if (b-rchild==p) { printf(%c ,b-data); //访问*b结点 top--;p=b; //p指向则被访问的结点 } else { b=b-rchild; //b指向右孩子结点 flag=0; //设置b的左孩子未访问 } } } while (top!=-1); } b的右孩子不存在或已访问过 b p 后序序列中最后访问的结点是根结点,也可以说一个结点的右孩子访问了,则其左、右孩子均已访问。 从上述过程可知,栈中保存的是当前结点*b的所有祖先结点(均未访问过)。 例如,求一个结点的所有祖先结点。 7.5 二叉树的基本运算及其实现 7.5.1 二叉树的基本运算概述 7.5.2 二叉树的基本运算算法实现 7.5.1 二叉树的基本运算概述 归纳起来,二叉树有以下基本运算: (1)创建二叉树CreateBTNode(*b,*str):根据二叉树括号表示法的字符串*str生成对应的链式存储结构。 (2)查找结点FindNode(*b,x):在二叉树b中寻找data域值为x的结点,并返回指向该结点的指针。 (3)找孩子结点LchildNode(p)和RchildNode(p):分别求二叉树中结点*p的左孩子结点和右孩子结点。 (4)求高度BTNodeDepth(*b):求二叉树b的高度。若二叉树为空,则其高度为0;否则,其高度等于左子树与右子树中的最大高度加l。 (5)输出二叉树DispBTNode(*b):以括号表示法输出一棵二叉树。 7.5.2 二叉树的基本运算算法实现 (1) 创建二叉树CreateBTNode(*b,*str) 用ch扫描采用括号表示法表示二叉树的字符串。分以下几种情况: ① 若ch=(:则将前面刚创建的结点作为双亲结点进栈,并置k=1,表示其后创建的结点将作为这个结点的左孩子结点; ② 若ch=):表示栈中结点的左右孩子结点处理完毕,退栈; ③ 若ch=,:表示其后创建的结点为右孩子结点; ④ 其他情况,表示要创建一个结点,并根据k值建立它与栈中结点之间的联系,当k=1时,表示这个结点作为栈中结点的左孩子结点,当k=2时,表示这个结点作为栈中结点的右孩子结点。如此循环直到str处理完毕。算法中使用一个栈St保存双亲结点,top为其栈指针,k指定其后处理的结点是双亲结点(保存在栈中)的左孩子结点(k=1)还是右孩子结点(k=2)。 void CreateBTNode(BTNode * b,char *str) { BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0; char ch; b=NULL; /*建立的二叉树初始时为空*/ ch=str[j]; while (ch!=\0)
您可能关注的文档
- 数学同位角内错角同旁内角课件浙教版八年级上.ppt
- 数学和科技丘成桐教授北京二零零四年三月二十四日由.ppt
- 数学和应用数学(师范)专业.doc
- 数学圆柱圆锥圆台球简单组合体的几何特征课件新人教版A版必修.ppt
- 数学增收节支课件北师大版八年级上.ppt
- 数学增收节支课件.ppt
- 数学学习也丰富多彩.doc
- 数学实数与向量的积课件新人教B版必修.ppt
- 数学实验之十三混沌.ppt
- 数学家的风采——陈省身9.doc
- 福建省福州市仓山区2024-2025学年七年级下学期期中考试语文试卷(含答案).pdf
- 2025年中国不锈钢真空运动水壶数据监测研究报告.docx
- 苏北盆地干热岩压裂复杂缝网形成机理研究.docx
- BI-3406在肝细胞癌中的作用和机制研究.docx
- 2025年中国胶脚数据监测研究报告.docx
- 福建省莆田锦江中学2025-2026学年九年级上学期11月期中英语试题(无答案).pdf
- 山东省菏泽市单县2025-2026学年八年级上学期11月期中语文试题.pdf
- 山东省菏泽市单县2025-2026学年九年级上学期11月期中语文试题.pdf
- 北京汇文中学教育集团2025-2026学年八年级上学期期中考试英语试题(含答案).pdf
- 安徽省安庆市望江县部分学校联考2025-2026学年八年级上学期11月期中数学试题.pdf
最近下载
- 汽车保险与理赔教学课件(简约版)项目2 车险赔款计算.pdf VIP
- 把自己重养一遍读书记录 .pdf VIP
- 2024年考试商业摄影师高级题库附答案.docx VIP
- 2024年摄影师技能理论知识考试题库(附答案).docx VIP
- 2024年艺术摄影师、商业摄影师等技能及理论知识考试题库(附含答案).docx VIP
- 2025年艺术摄影师、商业摄影师等技能及理论知识考试题库(附含答案).docx VIP
- 2025年艺术摄影师、商业摄影师等技能及理论知识考试题库(附含答案).docx VIP
- 2023年商业摄影师摄影技术方法及理论知识考试题库(附含答案).pdf VIP
- 笼养蛋鸡钙、磷与骨骼代谢规律及其调节机制-动物营养与饲料科学专业论文.docx VIP
- 2024年商业摄影师技能竞赛理论考试题库备赛500题(含答案).pdf VIP
原创力文档


文档评论(0)