前序遍历
把栈中的每一个节点都当作是一棵完整的二叉树,每次pop出一个节点,访问,然后把右左两棵子树入栈。
中序遍历
把栈中的每一个节点当作是只有右子树的二叉树,这就需要每次入栈时处理好它的左子树,一路向左把所有的节点入栈,然后出栈,访问,然后把这个节点的右子树当作是二叉树按同样的方法处理(一路向左)
后序遍历
后序遍历的关键就在于如何判断一个节点是应该遍历它的两棵子树还是它自己,
后序遍历有这样的特点:
- 如果有右子树,那么它的右孩子一定正好在它之前
- else 如果有左子树,那么它的左孩子一定正好在它之前
- 如果左右子树都没有那么说明它可以直接访问
所以我们在便利过程中设置一个变量保存刚刚遍历过的节点,然后根据上面的性质就可以判断是该访问栈顶元素还是它的两棵子树了。