数据结构与算法-递归与非递归的转换.doc

数据结构与算法-递归与非递归的转换.doc

ID:51065359

大小:40.00 KB

页数:15页

时间:2020-03-09

数据结构与算法-递归与非递归的转换.doc_第1页
数据结构与算法-递归与非递归的转换.doc_第2页
数据结构与算法-递归与非递归的转换.doc_第3页
数据结构与算法-递归与非递归的转换.doc_第4页
数据结构与算法-递归与非递归的转换.doc_第5页
资源描述:

《数据结构与算法-递归与非递归的转换.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、递归与非递归转换的基础知识是能够正确理解三种树的遍历方法:前序,中序和后序,第一篇就是关于这三种遍历方法的递归和非递归算法。一、为什么要学习递归与非递归的转换的实现方法?1)并不是每一门语言都支持递归的。2)有助于理解递归的本质。3)有助于理解栈,树等数据结构。二、三种遍历树的递归和非递归算法递归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来。需要说明的是,这个”原理”并没有经过严格的数学证明,只是我的一个猜想,不过在至少在我遇到的例子中是适用的。学习过树结构的人都知道,有三种方法可以遍历树:前序,中序,后序。理解这三种遍历方式的递归和非递归的表达方式是能够正确实现转换

2、的关键之处,所以我们先来谈谈这个。需要说明的是,这里以特殊的二叉树来说明,不过大多数情况下二叉树已经够用,而且理解了二叉树的遍历,其它的树遍历方式就不难了。1)前序遍历   a)递归方式:     voidpreorder_recursive(BitreeT)     /*先序遍历二叉树的递归算法*/         {              if(T){                       visit(T);         /*访问当前结点*/                       preorder_recursive(T->lchild);  /*访问左子树*/  

3、                      preorder_recursive(T->rchild);  /*访问右子树*/                }         }       b)非递归方式     voidpreorder_nonrecursive(BitreeT)     /*先序遍历二叉树的非递归算法*/     {           initstack(S);           push(S,T);            /*根指针进栈*/           while(!stackempty(S)){                while(gettop

4、(S,p)&&p){     /*向左走到尽头*/                     visit(p);     /*每向前走一步都访问当前结点*/                     push(S,p->lchild);                }                pop(S,p);                if(!stackempty(S)){     /*向右走一步*/                    pop(S,p);                    push(S,p->rchild);                 }      

5、        }        } 2)中序遍历 a)递归方式   voidinorder_recursive(BitreeT)     /*中序遍历二叉树的递归算法*/   {        if(T){             inorder_recursive(T->lchild);  /*访问左子树*/             visit(T);         /*访问当前结点*/             inorder_recursive(T->rchild);  /*访问右子树*/         }   } b)非递归方式   void inorder_nonrecurs

6、ive(BitreeT)   {        initstack(S);           /*初始化栈*/        push(S,T);           /*根指针入栈*/        while(!stackempty(S)){                      while(gettop(S,p)&&p)   /*向左走到尽头*/                  push(S,p->lchild);             pop(S,p);        /*空指针退栈*/             if(!stackempty(S)){           

7、       pop(S,p);                  visit(p);     /*访问当前结点*/                  push(S,p->rchild);  /*向右走一步*/             }        }    }3)后序遍历 a)递归方式   voidpostorder_recursive(BitreeT)     /*中序遍历二叉树的递归算法*/   {      

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。