實驗七、數據結構之二叉樹 用遞歸方法建立二叉樹 C語言版

1. 看了大佬C++版本的遞歸法建立二叉樹:在此有興趣用C語言實現一下

C++版本鏈接:https://blog.csdn.net/stpeace/article/details/8138303

2. 實現效果:

在這裏插入圖片描述

3. 源代碼(已驗證)
   假設二叉樹爲:

                                   a

                          b                 c

                               d                 e

   

   因爲程序中要知道葉子結點(終點),所以要將上面的二叉樹變成擴展二叉樹 (把葉子結點的孩子補成#, 用作標記),  擴展後就變成了:         

                                   a

                        b                    c

                   #        d          #       e

                          #    #             #    #

那麼,按先序序列輸入二叉樹的時候,需要輸入: ab#d##c#e## (注意,輸入後,按enter鍵即可) ,完整程序如下:(先序創建二叉樹)

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct Binnode
  5 {
  6     char data;
  7     struct Binnode *lchild;
  8     struct Binnode *rchild;
  9 } Binnode, *Bintree;
 10 
 11 void Create_Bintree(Bintree *root)
 12 {
 13     char ch;
 14 
 15     if ((ch = getchar()) == '#') {
 16         *root = NULL;
 17     } else {
 18         *root = (Binnode *)malloc(sizeof(Binnode));
 19         (*root)->data = ch;
 20         Create_Bintree(&(*root)->lchild);
 21         Create_Bintree(&(*root)->rchild);
 22     }
 23 }
 24 
 25 void Preorder(Bintree *t)
 26 {
 27     if (*t != NULL){
 28         printf("%c", ((*t)->data));
 29         Preorder(&(*t)->lchild);
 30         Preorder(&(*t)->rchild);
 31     }
 32 }
 33 
 34 void Inorder(Bintree *t)
 35 {
 36     if (*t != NULL){
 37         Inorder(&(*t)->lchild);
 38         printf("%c", (*t)->data);
 39         Inorder(&(*t)->rchild);
 40     }
 41 }
 42 
 43 void Posorder(Bintree *t)
 44 {
 45     if (*t != NULL){
 46         Posorder(&(*t)->lchild);
 47         Posorder(&(*t)->rchild);
 48         printf("%c", (*t)->data);
 49     }
 50 }
 51 int main()
 52 {
 53     Bintree T;
 54     printf("Tree Create Start!\n");
 55     Create_Bintree(&T);
 56     printf("Tree Create OK!\n");
 57     printf("先序遍歷:\n");
 58     Preorder(&T);
 59     printf("\n中序遍歷:\n");
 60     Inorder(&T);
 61     printf("\n後序遍歷:\n");
 62     Posorder(&T);
 63     printf("\n");
 64     return 0;
 65 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章