| #include "malloc.h" #include "stdio.h" #define ERROR 0 #define OVERFLOW -2 #define OK 1
typedef char TElemType; typedef int Status; typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree;
Status pnt(TElemType e) { printf(" %c",e); return OK; }
Status PreOrderTraverse(BiTree T, Status(* Visit)(TElemType e)){ if (T){ if (Visit(T->data)) if (PreOrderTraverse(T->lchild,Visit)) if (PreOrderTraverse(T->rchild,Visit)) return OK; return ERROR; }else return OK; }//PreOrderTraverse
Status InOrderTraverse(BiTree T, Status(* Visit)(TElemType e)){ if (T){ if (InOrderTraverse(T->lchild,Visit)) if (Visit(T->data)) if (InOrderTraverse(T->rchild,Visit)) return OK; return ERROR; }else return OK; }//InOrderTraverse
Status PostOrderTraverse(BiTree T, Status(* Visit)(TElemType e)){ if (T){ if (PostOrderTraverse(T->lchild,Visit)) if (PostOrderTraverse(T->rchild,Visit)) if (Visit(T->data)) return OK; return ERROR; }else return OK; }//PostOrderTraverse
Status CreateBiTree(BiTree &T) { char ch; scanf("%c",&ch); if (ch=='#') T=NULL; else { if (!(T=(BiTNode *) malloc(sizeof (BiTNode)))) return(OVERFLOW); T->data = ch ; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return OK; }//CreateBiTree
void main() { BiTree T;
CreateBiTree(T); printf("\n"); PreOrderTraverse(T,pnt); printf("\n"); InOrderTraverse(T,pnt); printf("\n"); PostOrderTraverse(T,pnt); printf("\n"); }
|