伪代码

typedef struct BiTNode {
    TElemType data;
    struct BiTNode * lchild,* rchild;
}BiTNode, *BiTree;


// 先序遍历的顺序创建二叉树 
Status CreateBiTree(BiTree &T)
{
    scanf(&ch);
    if(ch == '') T = NULL;
    else
    {
        T = (BiTNode *)malloc(sizeof(BiTNode));
        if(!T) exit(OVERFLOW);
        T->data = ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    return OK;
}

// 先序遍历
void PreOrderTraverse(BiTree &T)
{
    if(T)
    {
        printf("%d ",T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
}

// 中序遍历
void InOrderTraverse(BiTree &T)
{
    if(T)
    {
        InOrderTraverse(T->lchild);
        printf("%d ",T->data);
        InOrderTraverse(T->rchild);
    }
}

// 后序遍历 
void PostOrderTraverse(BiTree &T)
{
    if(T)
    {
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        printf("%d ",T->data);
    }
}
/*
    从根节点开始,先一直往左结点查询,
    不为空则压栈,否则将栈顶元素弹出,然后将弹出的结点的右子树压栈 
*/ 
// 栈的方式中序遍历 
void stackInOrder(BiTree &T)
{
    InitStack(S);
    BiTree p = T;
    BiTree q = (BiTNode *)malloc(sizeof(BiTNode));
    while(p || !StackEmpty(S))
    {
        if(p)
        {
            push(p->lchild);
            p = p->lchild;
        }
        else
        {
            pop(p,q);
            printf("%d ",q->data);
            p = q->rchild;
        }
    }
}