二叉树的遍历用递归来实现相当简单,前面已经有文章讨论过,下面来讨论一下二叉树前序遍历的非递归实现。
二叉树的非递归前序遍历主要用栈来实现。根据先序遍历的顺序,先访问根节点,再访问左子树,后访问右子树,而对于每个子树来说,又按照同样的访问顺序进行遍历,先序遍历具体代码如下:

void PrePrint(struct TreeNode *r)
{
    struct stack stack1;           //创建一个栈
    stack1.top = &stack1.node[0];  //初始化栈指针
    struct TreeNode *p =r;         //树的根节点设为p
    while(p||!isEmpty(&stack1))
    {
        if(p!=NULL)
        {
            printf("%d ",p->data);
            push(&stack1,p);
            p = p->left;
        }
        else
        {
            p=pop(&stack1);
            p=p->right;
        }
    }
}