c語言(二叉樹的操作)


#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
typedef struct BTNode
{
    int data;
    struct BTNode *Lchild,*Rchild;
}BTree;
//初始化
BTree * Ini_BTNode()
{
    BTree *bt ;
    int a;
    bt=(BTree *)malloc(sizeof(BTree));
    printf("輸入根節點:(0表示空樹)\n");
    scanf("%d",&a);
    if(a==0)
    {
        printf("這是空樹!");
        exit(0);
    }
    bt->data=a; 
    bt->Lchild=NULL;  //左子樹節點 
    bt->Rchild=NULL;  //右子樹節點 
    return bt;
} 
creat_BiTree(BTree *bt)//輸入左子樹 
{
       
      int a;
      BTree *Node;
      printf("請輸入%d節點的左孩子(0為空)\n",bt->data) ;
      scanf("%d",&a);
      if(a!=0)
      {
              Node=(BTree*)malloc(sizeof(BTree));
              Node->data=a;
              Node->Lchild=NULL;
              Node->Rchild=NULL;
              bt->Lchild=Node;
              creat_BiTree(bt->Lchild);
                
      } 
      printf("請輸入%d節點的右孩子(0為空)\n",bt->data) ; //輸入右子樹
      scanf("%d",&a);
      if(a!=0)
      {
              Node=(BTree *)malloc(sizeof(BTree));
              Node->data=a;
              Node->Lchild=NULL;
              Node->Rchild=NULL;
              bt->Rchild =Node;
              creat_BiTree(bt->Rchild);
                
      }
      
      return 0;
      
      
}
void PerOrderTraverse(BTree *bt) //先序遍歷
{
    if(bt!=NULL)
   { printf("%d -->",bt->data);
     PerOrderTraverse(bt->Lchild); 
     PerOrderTraverse(bt->Rchild);            
   }
}
void InOrderTraverse(BTree *bt) //中序遍歷 
{
    if(bt!=NULL)
   { 
     InOrderTraverse(bt->Lchild);
     printf("%d -->",bt->data); 
     InOrderTraverse(bt->Rchild);            
   }
}
void PostOrderTraverse(BTree *bt) //后序遍歷 
{
    if(bt!=NULL)
   { 
     PostOrderTraverse(bt->Lchild);
     PostOrderTraverse(bt->Rchild); 
     printf("%d -->",bt->data);            
   }
}      


 
main()
{
    BTree  *bt;
    int a;
    printf("\t\t****************  二叉樹操作  ****************\n\n");
    bt=Ini_BTNode();creat_BiTree(bt);
    printf("以%d為根的樹創建成功!\n",bt->data);
    system("pause"); 
    system("cls");
    while(1)
    {

        system("cls");
        printf("\t\t1. 先序遍歷\n");
        printf("\t\t2. 中序遍歷\n");
        printf("\t\t3. 后序遍歷\n");
        printf("\t\t4. 退出程序\n");
        printf("\t請選擇:");
        scanf("%d",&a);
        switch(a)
        {
         case 1:printf("先序遍歷\n");
                PerOrderTraverse(bt);   
                printf("\n");
                system("pause"); break;
         case 2:printf("中序遍歷\n");
                 InOrderTraverse(bt);
                 printf("\n");
                system("pause"); break;
             

         case 3:printf("后序遍歷\n");
                 PostOrderTraverse(bt);
                 printf("\n");
                system("pause"); break;
         case 4:exit(0); 
         default:printf("輸入錯誤");
        }
    
     } 
  system("pause");  
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM