我们知道,用递归解决的问题,必须满足以下两个条件:
- 一个问题能够分解成规模更小,且与原问题有着相同解的问题;
- 存在一个能让递归调用退出的简单出口。
但是递归容易溢出,所以我们需要将递归转变为非递归,这里,我们学习堆栈模拟。
其实我们知道递归其实就是一种栈的模拟,我们不妨用一个栈来记录我们需要的值,
不断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); } }