伪代码
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; } } }