非遞归处理栈.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
非遞归处理栈

Houfeng Wang, ICL of PKU 非递归处理 — 栈 1. 先根:PreOrder(Bnode p) 右子树进栈 左子树进栈 栈顶元素出栈,重复! PreOrder(BNode t) { BNode a; push(t); Do { a=top(paseq); // 取栈paseq 的栈顶元素 pop(paseq); //出栈 if(a!=NULL) { visit(a); push(rightchild(a)); //右孩子进栈 push(lightchild(a)); //左孩子进栈 } // if (a!=NULL) } while( isEmptyStack_seq(paseq)) //栈空,结束。 }// PreOrder(BNode t 中根(对称序) PreOrder(Bnode p) 如何保证根节点出栈后不再进? 特是标记:栈内每个元素有两个域: struct snode { BNode element; char tag; } typedef struct snode DataType InOrder(BNode t) { DataType a; a.element=t; a.element.tag=1; push(t); Do { a=top(paseq); // 取栈paseq 的栈顶元素 pop(paseq); //出栈 if(a.element!=NULL) { If(a.tag!=1) visit(a.element); else { (右孩子 and tag=1) 进栈 ( 根 and tag=0) 进栈 (左孩子 and tag=1) 进栈 } } // (a.element!=NULL) } while( isEmptyStack_seq(paseq)) //栈空,结束。 }// InOrder(BNode t) 后根周游算法 方法:见教材,两种算法(后者以递归方式进栈) 基本思想: Step1:根进栈, Step2:栈顶元素出栈,且:分解 ①退栈元素的 Tag=0,则输出,否则: ②退栈的元素再进栈(Tag=0) 退栈的元素左子节点进栈(Tag=1) 退栈的元素右子节点进栈(Tag=1) Step2:重复 Step2,直至栈空 后根周游算法 如何写算法??(练习!!!) 与教材上的算法比较 ?树、树林转换为二叉树 将树或树林转换成对应的二叉树可以按以下步骤进行: (1)??? 在所有相邻的兄弟结点之间加一条线; (2)??? 对每个非终端结点,只保留它到其最左子女的连线,删去它与其它子女之间的连线; (3)??? 以根结点为轴心,将整棵树顺时针旋转一定角度(如45度),使其结构层次分明。 5.16给出的例子显示了这一转换过程。 树的长子兄弟表示方法 struct CSNode; /* 树中结点结构 */ typedef struct CSNode *PCSNode; /* 结点的指针类型 */ struct CSNode /* 结点结构定义 */ { DataType info; /* 结点中的元素 */ PCSNode lchild; /* 结点的最左子女的指针 */ PCSNode rsibling; /* 结点的右兄弟的指针 */ }; 将PCSNode rsibling 改为: PCSNode rchild; typedef struct CSNode *CSTree; /* 树类型定义 */ 设树林 F 是有序的序列,F = T1,T2,…,Tn,对应于 F 的二叉树 B(F) 的定义如下: (1)??? 若n = 0,则B(F)为空; (2)??? 若n>0,则B(F)的根是T1的根w1,B(F)的左子树是B(T11,T12,…,T1m),其中T11,T12,…,T1m是T1的子树;B(F)的右子树是B(T2,…,Tn ) 树对应到二叉树其根结点的右子树总是为空的。如图5.17。 二叉树转换为树或树林 将二叉树转换成树或树林可以按以下步骤进行: (1)?若某结点是其父母的左子女,则把该结点的右子女,的右子女的右子女……,都与该结点的父母用虚线连起来; (2)?去掉原二叉树中所有父母到右子女的连线; (3)?整理由(1)、(2)两步所得到的树或树林,使之结构层次分明,并将虚线改为实线。   图5.18所

文档评论(0)

1234554321 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档