前序遍历定义:
先访问curNode,再访问 left subtree,再访问right subtree
思路:
类似inorder traversal,根据前序遍历的定义,利用stack来替代recursion。
关键:
- stack的意义是?
既然stack的方法可以替代recursion的方法,那么stack一定实现了recursion中的某个功能。什么功能呢?backtrack!
试想一下,当访问完左子树之后需要访问右子树,那么怎么才能够从左子树的最后一个被访问节点跳到右子树的第一个节点?
利用Stack,可以先将右子树的第一个节点压到栈底,当左子树的节点被完全访问之后,说明栈中已无左子树的节点,栈顶节点即为右子树的第一个节点。
因此,stack中节点的的意义是:
- 栈顶的节点是下一个要访问的节点
- 位于顶端的比位于底端的节点先得到访问
- 已访问的节点已出栈
- 后访问的节点可能在栈中或者还未被加到栈中