用遞歸實現二叉樹的建立與遍歷


內容簡介:

  此次作業在建立二叉樹時采用先序輸入的方法,遍歷時則采用先序,中序,后序三種方法。

  注:建立二叉樹時,以輸入的字符為"#"為結束。

  此次的二叉樹結構為:

 

 1.二叉樹的建立: 

void createBiTree(PTree *p)//建立二叉樹
  {
     char ch;
     scanf("%c", &ch);
     getchar();//此時%c讀取的是單個字符,所以用getchar來接收一下
     if(ch == '#')//結束條件
          *p = NULL;
     else
     {
         *p = (PTree)malloc(sizeof(Tree));
         (*p) -> ch = ch;
         printf("請輸入%c的左子樹\n", ch);
        createBiTree(&(*p) -> lchild);
        printf("請輸入%c的右子樹\n", ch);
         createBiTree(&(*p) -> rchild);
     }
 
 }

2.二叉樹的遍歷:

(1)先序遍歷

void preOrderTraverse(PTree p)//先序遍歷
 {
     if(p == NULL)
         return ;
     printf("%c ", p -> ch);
     preOrderTraverse(p -> lchild);
     preOrderTraverse(p -> rchild);
 }

 

(2)中序遍歷

void InOrderTraverse(PTree p)//中序遍歷
 {
     if(p == NULL)
         return;
     InOrderTraverse(p -> lchild);
     printf("%c ", p -> ch);
          InOrderTraverse(p -> rchild);
 }

(3)后序遍歷

void BackOrderTraverse(PTree p)//后續遍歷
 {
     if(p == NULL)
         return ;
     BackOrderTraverse(p -> lchild);
     BackOrderTraverse(p -> rchild);
     printf("%c ", p -> ch);
 }

3.主函數:

int main()
 {
     PTree pt;
     createBiTree(&pt);
     printf("先序遍歷:"); 
     preOrderTraverse(pt);
     printf("\n");
     printf("中序遍歷:");
     InOrderTraverse(pt);
     printf("\n");
     printf("后序遍歷:");
     BackOrderTraverse(pt);
     printf("\n");
     return 0;
 }

4.運行結果:

 

 

5.總結:

  此次建立二叉樹采用了先序輸入的方式,從左到右依次建立子樹,並使用遞歸依次進行先,中,后序遍歷,參考了ppt上的相關算法,但使用的方法好像較為重復和麻煩,還要提升自己編程的能力。

 


免責聲明!

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



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