- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                如何用栈实现递归与非递归的转换
                    如何用栈实现递归与非递归的转换
如何用栈实现递归与非递归的转换
转载自:/thread-331522-1-1.html
 
一.为什么要学习递归与非递归的转换的实现方法?
   1)并不是每一门语言都支持递归的.
   2)有助于理解递归的本质.
   3)有助于理解栈,树等数据结构.
 
二.递归与非递归转换的原理.
   递归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来.需要说明的是,这个原理并没有经过严格的数学证明,只是我的一个猜想,不过在至少在我遇到的例子中是适用的.
   学习过树结构的人都知道,有三种方法可以遍历树:前序,中序,后序.理解这三种遍历方式的递归和非递归的表达方式是能够正确实现转换的关键之处,所以我们先来谈谈这个.需要说明的是,这里以特殊的二叉树来说明,不过大多数情况下二叉树已经够用,而且理解了二叉树的遍历,其它的树遍历方式就不难了.
   1)前序遍历
     a)递归方式:
	void preorder_recursive(Bitree T){         /* 先序遍历二叉树的递归算法 */
               if(T){
                    visit(T);                      /* 访问当前结点 */
                    preorder_recursive(T-lchild); /* 访问左子树 */
                    preorder_recursive(T-rchild); /* 访问右子树 */
                }
        }
      b)非递归方式:
	void preorder_nonrecursive(Bitree T){    /* 先序遍历二叉树的非递归算法 */
                initstack(S);
                push(S,T);                       /* 根指针进栈 */
                while(!stackempty(S)){
                    while(gettop(S,p)p){       /* 向左走到尽头 */
                        visit(p);                /* 每向前走一步都访问当前结点 */
                        push(S,p-lchild);
                    }
                    pop(S,p);
                    if(!stackempty(S)) {                /* 向右走一步 */
                        pop(S,p);
                        push(S,p-rchild); 
                    }
                }
       }
   2)中序遍历
      a)递归方式
         void inorder_recursive(Bitree T){         /* 中序遍历二叉树的递归算法 */
                 if(T){
                    inorder_recursive(T-lchild);    /* 访问左子树 */
                    visit(T);                        /* 访问当前结点 */
                    inorder_recursive(T-rchild);    /* 访问右子树 */
                 }
         }
      b)非递归方式
	void  inorder_nonrecursive(Bitree T){
                 initstack(S);                        /* 初始化栈 */
                 push(S, T);                          /* 根指针入栈 */
		 while (!stackempty(S)){                        
                     while (gettop(S, p)  p)        /* 向左走到尽头 */
               
                您可能关注的文档
最近下载
- 高二化学选择性必修三知识点 .pdf
 - 图形创意(第二版)林家阳 高教 全套课件.pdf VIP
 - 社区网格员安全培训课件.ppt VIP
 - 浅谈水体富营养化治理的国内外研究现状.pdf VIP
 - 公共管理研究方法(浙大)大学MOOC慕课 客观题答案.docx VIP
 - “十五五”档案战略规划与发展方向.docx VIP
 - 《创新创业基础——理论、案例与训练》 第七章 选择商业模式.pptx VIP
 - 国际快递实务 出境快件的检验检疫 PPT-海关快件监管流程.pptx VIP
 - 《老年人心理护理》精品课件——项目二 老年人认知变化及其应对.pptx
 - 一种硫化镉-硫铟锌异质结纳米棒阵列复合材料及其制备方法.pdf VIP
 
原创力文档
                        

文档评论(0)