이 진 트 리 의 우선 순 서 는 옮 겨 다 니 고, 중간 순 서 는 옮 겨 다 니 며, 뒤의 순 서 는 옮 겨 다 닌 다.

3248 단어
//             ,            ,     
#include<malloc.h> // malloc() 
 #include<stdio.h> //          ,  EOF(=^Z F6),NULL 
 #include<stdlib.h> // atoi(),exit()
 #include<math.h> //        ,  floor(),ceil(),abs() 


#define ClearBiTree DestroyBiTree //                 

typedef struct BiTNode
 { 
 int data; //     
    BiTNode *lchild,*rchild; //       
 }BiTNode,*BiTree;

int Nil=0; //     0  
void visit(int e)
 { printf("%d ",e); //        
 }
 void InitBiTree(BiTree &T)
 { //     :      T
   T=NULL;
 }

 void CreateBiTree(BiTree &T)
 { //   6.4:               (        ,      ),
   //             T。  Nil   ( ) 。  
   int number;
   scanf("%d",&number); //       
   if(number==Nil) //       
     T=NULL;
   else //        
   { T=(BiTree)malloc(sizeof(BiTNode)); //      
     if(!T)
       exit(OVERFLOW);
     T->data=number; //     T    
     CreateBiTree(T->lchild); //        
     CreateBiTree(T->rchild); //        
   }
 }

 void DestroyBiTree(BiTree &T)
 { //     :   T  。    :     T
   if(T) //    
   { DestroyBiTree(T->lchild); //        ,     ,        
     DestroyBiTree(T->rchild); //        ,     ,        
     free(T); //      
     T=NULL; //     0
   }
 }

 void PreOrderTraverse(BiTree T,void(*Visit)(int))
 { //     :   T  ,Visit           。    6.1
   //     :      T,         Visit      
   if(T) // T  
   { Visit(T->data); //       
     PreOrderTraverse(T->lchild,Visit); //         
     PreOrderTraverse(T->rchild,Visit); //          
   }
 }

 void InOrderTraverse(BiTree T,void(*Visit)(int))
 { //     :   T  ,Visit           
   //     :      T,         Visit      
   if(T)
   { InOrderTraverse(T->lchild,Visit); //         
     Visit(T->data); //       
     InOrderTraverse(T->rchild,Visit); //          
   }
 }

  void PostOrderTraverse(BiTree T,void(*Visit)(int))
 { //     :   T  ,Visit           
   //     :      T,         Visit      
   if(T) // T  
   { PostOrderTraverse(T->lchild,Visit); //         
     PostOrderTraverse(T->rchild,Visit); //         
     Visit(T->data); //        
   }
 }

 void main()
 {
   BiTree T;
   InitBiTree(T); //       T
   printf("               ,  0      ,    :1 2 0 0 3 0 0
"); CreateBiTree(T); // T printf(" :
"); PreOrderTraverse(T,visit); // T printf("

"); InOrderTraverse(T,visit); // T printf("

"); PostOrderTraverse(T,visit); // T }
                ,  0      ,    :1 2 0 0 3 0 0 
1 2 4 6 0 0 7 0 8 9 0 0 10 0 0 5 0 0 3 0 0 
         :1 2 4  6 7 8 9 10 5 3
         :6 4 7 9 8 10 2 5 1 3 
         :6 9 10 8 7 4 5 2 3 1 
           ,                      ,             ,        
             。
    :(1)     ;(2)        ;(3)        
    :(1)        ;(2)     ;(3)        
    :(1)        ;(2)        ;(3)     
 
 

좋은 웹페이지 즐겨찾기