先序遍历
void preOrder(TNode* root)
{
if ( root != NULL)
{
Stack S;
S.push(root);
while (!S.empty())
{
TNode* node = S.pop();
Visit(node); // 先访问根节点,然后根节点就无需入栈了
if (node->right != NULL)
S.push(node->right); // 先push的是右节点,再是左节点
if (node->left != NULL)
S.push(node->left);
}
}
}
中序遍历:原理就是先将最左边的都压栈,直到最左边,然后出栈,出栈一个就访问它的右子树,这样就能保证右子树是在根节点访问之后再访问的,当然左子树是最先访问的
// 中序遍历伪代码:非递归版本,用栈实现
void InOrder(TNode* root)
{
Stack S;
while ( root != NULL || !S.empty() )
{
while( root != NULL