輸入一組整數後用c語言數據結構對其進行大小比較以二叉樹存儲、遍歷

 要求可從輸入端輸入一組數據後對其進行比較後以先序遍歷、中序遍歷、後序遍歷輸出:

代碼如下:

#include <stdio.h>
#include <stdlib.h>
#define N 12
typedef struct btree
   {
    int data;
    struct btree *left;
    struct btree *right;
   }BTR,*PBTR;

PBTR Bitree=NULL;
void creat_btree(int *a,int size)                                 /*The establishment of tree*/
      {
       int i;
       PBTR pre,pre2;
       for(i=0;i<size;i++)
           {
                     if(Bitree==NULL)
                           {
                             Bitree=(PBTR)malloc(sizeof(BTR));      //分配空間
                             if(Bitree==NULL)                                  //分配空間失敗
                                    {
                                       printf("Malloc fail/n");
                                       break;
                                    }
                             else
                                   {
                                    Bitree->data=a[i];                          //分配成功時,將第一個元素值給Bitree
                                    Bitree->left=NULL;                      //左節點置爲空
                                    Bitree->right=NULL;
                                    continue;                                       //結束本次循環
                                   }
                            }
                    else
                           {
                             pre=Bitree;                                          //將第一個元素給pre
                                                        
                          }
    
           while(1)
              {
               if(a[i]>pre->data)                                             
                   {
                     if(pre->right==NULL)
                       {
                         pre2=(PBTR)malloc(sizeof(BTR));
                         if(pre2==NULL)
                           {
                           printf("Malloc fail/n");
                           break;
                           }
                         else
                          {
                           pre2->data=a[i];
                           pre2->left=NULL;
                           pre2->right=NULL;
                           pre->right=pre2;
                           break;
                          }
                       }
                    else
                       {
                        pre=pre->right;                                                         //如果右節點不爲空就將pre的右節點賦值給pre
                       }
                  }
            else                                                                                      //如果新元素小於已經存在的根節點,就將元素往左邊比較
              {
                if(pre->left==NULL)
                    {
                      pre2=(PBTR)malloc(sizeof(BTR));
                      if(pre2==NULL)
                         {
                           printf("Malloc fail/n");
                           break;
                         }
                      else
                         {
                           pre2->data=a[i];
                           pre2->left=NULL;
                           pre2->right=NULL;
                           pre->left=pre2;
                           break;
                         }
                     }
                 else
                   {
                     pre=pre->left; 
                    }
       
               }   
           }
       }
      
    }

void preorder(PBTR p)                                                              //先序遍歷
         {
           if(p!=NULL)
             {
               printf("%2d,",p->data);
               preorder(p->left);
               preorder(p->right);     
             }   
          }

 

void midorder(PBTR p)                                                       //中序遍歷
      {
        if(p!=NULL)
           {
             midorder(p->left);
             printf("%2d,",p->data);
             midorder(p->right);     
           }   
      }


void postorder(PBTR p)                                           //後序遍歷


       {
         if(p!=NULL)
             {
                postorder(p->left);
                postorder(p->right);
                printf("%2d,",p->data);    
             }   
       }

 

void main()
{  
    int i,a[N];
    printf("/ninput 12 number:/n");
  
   for(i=0;i<N;i++)                                                             //輸入元素
        {
         printf("/n%d,",i);
         scanf("%d",&a[i]);
                        
         }
   printf("/n/n");      
   printf("The establishment of the establishment of non-recursive tree:/n");
   printf("/n/n");
   creat_btree(a,N);
   printf("/n/n");
   printf("Pre-order traversal:  ");
   printf("/n/n");
   preorder(Bitree);
   printf("/n/n");
   printf("/nIn order traversal:  ");
   printf("/n/n");
   midorder(Bitree);
   printf("/n/n");
   printf("/nFollow-up to traverse:  ");
   printf("/n/n");
   postorder(Bitree);
   printf("/n");
  

   for(; ;){}                                                       /*for循環在這裏的功能是,當我編譯運行的時候。輸入元素後按回車,編譯工具後後臺將outprintf窗口給關閉了,所以寫一個for告訴outprintf窗口等一下關閉還有操作*/
 }

編譯通過!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章