码迷,mamicode.com
首页 > 其他好文 > 详细

2018/2/15 每日一学 手写栈

时间:2018-02-15 10:28:08      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:style   递归调用   pop   gpo   需要   span   body   模拟   简单   

我们知道,用递归解决的问题,必须满足以下两个条件:

  • 一个问题能够分解成规模更小,且与原问题有着相同解的问题;
  • 存在一个能让递归调用退出的简单出口。

但是递归容易溢出,所以我们需要将递归转变为非递归,这里,我们学习堆栈模拟。

其实我们知道递归其实就是一种栈的模拟,我们不妨用一个栈来记录我们需要的值,

不断push(递归)直到尽头,然后从尽头开始完成我们需要的处理。

看看中序遍历的代码吧:(转自https://www.cnblogs.com/coderkian/p/3758068.html)

 

void PreorderNonRecursive(Bitree root){
  stack stk;
  stk.push(root);
  while(!stk.empty()){
    p = stk.top();
    visit(p);
    stk.pop();
    if(p.rchild) stk.push(stk.rchild);
    if(p.lchild) stk.push(stk.lchild);
  }
}

 

2018/2/15 每日一学 手写栈

标签:style   递归调用   pop   gpo   需要   span   body   模拟   简单   

原文地址:https://www.cnblogs.com/Alex-leaves/p/8449267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!