数据间隔符为空格,例如:ABC--DE-G--F---   -代表空格

 
  1. #include<stdio.h> 
  2. #include<stdlib.h> 
  3. #include<conio.h> 
  4.  
  5. typedef struct tree 
  6.     char ch; 
  7.     struct tree *lchild; 
  8.     struct tree *rchild; 
  9. }TREE; 
  10.  
  11. void createTree(TREE **bt); 
  12. void fristRoot(TREE **bt); 
  13. void middleRoot(TREE **bt); 
  14. void lastRoot(TREE **bt); 
  15. void destroyTree(TREE **bt); 
  16.  
  17. int main() 
  18.     TREE **bt; 
  19.  
  20.     printf("Pleas input string:\n"); 
  21.     bt = (TREE **)malloc(sizeof(TREE *)); 
  22.     createTree(bt); 
  23.     printf("\n先序:\n"); 
  24.     fristRoot(bt); 
  25.     printf("\n中序:\n"); 
  26.     middleRoot(bt); 
  27.     printf("\n后序:\n"); 
  28.     lastRoot(bt); 
  29.     printf("\n"); 
  30.  
  31.     destroyTree(bt); 
  32.     free(bt); 
  33.     return 0; 
  34.  
  35. void createTree(TREE **bt) 
  36.     char ch; 
  37.     ch = getche(); 
  38.     if(ch == ' '
  39.         *bt = NULL; 
  40.     else 
  41.     { 
  42.         *bt = (TREE *)malloc(sizeof(TREE)); 
  43.         (*bt)->ch = ch; 
  44.         createTree(&((*bt)->lchild)); 
  45.         createTree(&((*bt)->rchild)); 
  46.     } 
  47.  
  48. void fristRoot(TREE **bt) 
  49.     if( *bt != NULL) 
  50.     { 
  51.         printf("%c ", (*bt)->ch); 
  52.         fristRoot(&((*bt)->lchild)); 
  53.         fristRoot(&((*bt)->rchild)); 
  54.     } 
  55.  
  56. void middleRoot(TREE **bt) 
  57.     if( *bt != NULL) 
  58.     { 
  59.         middleRoot(&((*bt)->lchild)); 
  60.         printf("%c ", (*bt)->ch); 
  61.         middleRoot(&((*bt)->rchild)); 
  62.     } 
  63.  
  64. void lastRoot(TREE **bt) 
  65.     if( *bt != NULL) 
  66.     { 
  67.         lastRoot(&((*bt)->lchild)); 
  68.         lastRoot(&((*bt)->rchild)); 
  69.         printf("%c ", (*bt)->ch); 
  70.     } 
  71.  
  72. void destroyTree(TREE **bt) 
  73.     if( *bt != NULL) 
  74.     { 
  75.         destroyTree( &((*bt)->lchild) ); 
  76.         destroyTree( &((*bt)->rchild) ); 
  77.         free(*bt); 
  78.     }