#include <STDIO.H> #include <STDLIB.H> #define OK 1 #define OVERFLOW -2 #define ERROR 0 typedef int TElemType; typedef int Status; typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; Status CreateBiTree(BiTNode **); //建立二叉链表 Status PreOrderTraverse( BiTNode * ); //前序遍历 Status InOrderTraverse( BiTNode * ); //中序遍历 Status PostOrderTraverse( BiTNode * ); //后序遍历 Status PrintElement(TElemType); int main() { BiTNode * T = NULL; CreateBiTree( &T ); PreOrderTraverse( T ); printf("\n"); InOrderTraverse( T ); printf("\n"); PostOrderTraverse( T ); printf("\n"); return 0; } Status CreateBiTree( BiTNode ** T ) { char ch; scanf("%c" , &ch); if (ch == '#') (*T) = 0; else { if ( !( (*T) = (BiTNode * ) malloc (sizeof ( BiTNode )) )) exit(OVERFLOW); (*T)->data = ch; CreateBiTree( &((*T)->lchild )); CreateBiTree( &((*T)->rchild )); } return OK; } Status PreOrderTraverse( BiTNode * T) { if ( T ) { if (PrintElement( T->data )) if( PreOrderTraverse( T->lchild )) if( PreOrderTraverse( T->rchild )) return OK; return ERROR; } else return OK; } Status InOrderTraverse( BiTNode * T) { if ( T ) { if ( InOrderTraverse( T->lchild )) if( PrintElement( T->data )) if( InOrderTraverse( T->rchild )) return OK; return ERROR; } else return OK; } Status PostOrderTraverse( BiTNode * T) { if ( T ) { if ( PostOrderTraverse( T->lchild )) if( PostOrderTraverse( T->rchild )) if( PrintElement( T->data )) return OK; return ERROR; } else return OK; } Status PrintElement( TElemType e) { printf("%c" , e); return OK; }
比如建立下图所示的二叉树,则输入为:-+A##*B##-C##D##/E##F##