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

Posted alex-leaves

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018/2/15 每日一学 手写栈相关的知识,希望对你有一定的参考价值。

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

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

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

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

不断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 每日一学 手写栈的主要内容,如果未能解决你的问题,请参考以下文章

C语言每日编程:打印一个圆形!代码+思路一学就会!

每日一学之认识Spring中的AOP

2018/2/22 每日一学 AC自动机

2018/2/23 每日一学 后缀数组

手写容器java新手一学就会

手写容器java新手一学就会