#include < conio.h > #include < stdio.h > #include < stdlib.h > #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 typedef int status;typedef struct BiNode ... { char Data; struct BiNode* lChild; struct BiNode* rChild;} BiNode, * pBiNode;status CreateTree(BiNode ** pTree);status PreOrderTraval(BiNode * pTree);status Visit( char Data);status Display(BiNode * pTree, int Level);status Clear(BiNode * pTree);BiNode * pRoot = NULL;main() ... { clrscr(); CreateTree(&pRoot); printf(" PreOrder:"); PreOrderTraval(pRoot); printf(" "); printf(" InOrder:"); InOrderTraval(pRoot); printf(" "); printf(" PostOrder:"); PostOrderTraval(pRoot); printf(" "); printf(" ShowLeaves:"); ShowLeaves(pRoot); printf(" ----------------------- "); printf(" "); Display(pRoot,0); printf(" "); printf(" Deleting Tree: "); DelTree(pRoot); printf("BiTree Deleted."); getch();} status CreateTree(BiNode ** pTree) /**/ /*Input Example: abd##e##cf##g##*/ ... { char ch; scanf("%c",&ch); if(ch=='#') ...{ (*pTree)=NULL; } else ...{ if(!((*pTree)=(BiNode*)malloc(sizeof(BiNode)))) ...{ exit(OVERFLOW); } (*pTree)->Data=ch; CreateTree(&((*pTree)->lChild)); CreateTree(&((*pTree)->rChild)); }return OK;} status PreOrderTraval(BiNode * pTree) ... { if(pTree) ...{ if(Visit(pTree->Data)) ...{ if(PreOrderTraval(pTree->lChild)) ...{ if(PreOrderTraval(pTree->rChild)) ...{ return OK; } } } return ERROR; } else ...{ return OK; }} status InOrderTraval(BiNode * pTree) ... { if(pTree) ...{ if(InOrderTraval(pTree->lChild)) ...{ if(Visit(pTree->Data)) ...{ if(InOrderTraval(pTree->rChild)) ...{ return OK; } } return ERROR; } return ERROR; } else ...{ return OK; }} status PostOrderTraval(BiNode * pTree) ... { if(pTree) ...{ if(PostOrderTraval(pTree->lChild)) ...{ if(PostOrderTraval(pTree->rChild)) ...{ if(Visit(pTree->Data)) ...{ return OK; } return ERROR; } } return ERROR; } else ...{ return OK; }} status Visit( char Data) ... { printf("%c",Data); return OK;} status Display(BiNode * pTree, int Level) ... { int i; if(pTree==NULL) return; Display(pTree->lChild,Level+1); for(i=0;i<Level-1;i++) ...{ printf(" "); } if(Level>=1) ...{ printf("--"); } printf("%c ",pTree->Data); Display(pTree->rChild,Level+1);} status ShowLeaves(BiNode * pTree) ... { if(pTree) ...{ if(ShowLeaves(pTree->lChild)) ...{ if(ShowLeaves(pTree->rChild)) ...{ if((pTree->lChild==NULL)&&(pTree->rChild==NULL)) ...{ if(!Visit(pTree->Data)) ...{ return ERROR; } } return OK; } } return ERROR; } else ...{ return OK; }} status DelTree(BiNode * pTree) ... { if(pTree) ...{ if(DelTree(pTree->lChild)) ...{ if(DelTree(pTree->rChild)) ...{ printf("Deleting %c ",pTree->Data); free((void*)pTree); return OK; } } return ERROR; } else ...{ return OK; }}