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 }