r而 如果采用栈替代树中序遍历的递归算法,那么出栈与入栈序列是有一定的特性的。
例如:
Push 1
Push 2
Push 3
Pop
Pop
Push 4
Pop
Pop
Push 5
Push 6
Pop
Pop
可以很清楚的看出入栈序列 1 2 3 4 5 6 即此二叉树的前序序列,出栈序列即此二叉树的中序序列。
下面给出证明:
由于是用栈替代中序递归,那么遇到根节点必定先入栈,而且是先入栈左子树的各根节点,直到遇到了最左的结点(不一定是叶子结点可能是无左孩子的分支结点)。那么每次都会入栈“根节点”,就符合的前序序列的从根->左子树的特点。再来,随后入栈右子树结点,又满足了左子树-> 右子树的特定,即完全满足了前序序列的特点。
而出栈顺序即中序序列是显然的。(因为本来就是用栈来模拟递归的中序遍历嘛。)