递归方式就是函数自身调用自身,当递归每次调用自身时,可以看作是入栈的过程,当递归条件满足后,结束时递归再一级一级的返回,返回过程可以看作是出栈的过程。递归和栈的实现过程可以看出都是符合“先进后出,后入先出”的原则,所以递归方式其实可以转化为栈的方式来实现。
对于二叉树的遍历,先序、中序、后序遍历都可以用到递归方法实现,既然递归可以转化为栈,那么如何把对二叉树的遍历也改为用栈的思想来实现?
对于下面这个例子,我们用栈思想做中序遍历时,过程是这样的:一开始进入,遇到A结点,因为中序遍历的顺序,要把A结点的左子树都遍历完后,才把A输出。所以遇到A后,就把A结点入栈,接下来往左走,遇到子树B,同样看B的左子树,B结点的左子树存在,所以还不可以输出B,就把B入栈。再往左边走,遇到D,D也先放入栈里面,接着看D的左子树,不存在,这时候就要返回了。把D输出,也就是出栈操作,把D Pop