C語言二叉樹的建立與遍歷


二叉樹的建立和遍歷都要用到遞歸,先暫時保存一下代碼,其中主要是理解遞歸的思想,其它的就都好理解了。這里是三種遍歷方式,其實理解一種,其它的幾個就都理解了,就是打印出來的順序不一樣而已。建立和遍歷的方式差不多。也分好幾種方式建立,這里 就寫一種,就是先序建立

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct TreeNode{
 5     char ch;
 6     struct TreeNode *lchild, *rchild;
 7 }Tree, *PTree;//定義樹節點的結構體
 8 void createBiTree(PTree *p)//建立二叉樹
 9 {
10     char ch;
11     scanf("%c", &ch);
12     getchar();//此時%c讀取的是單個字符,所以用那個getchar來接收一下
13     if(ch == '#')
14          *p = NULL;
15     else
16     {
17         *p = (PTree)malloc(sizeof(Tree));
18         (*p) -> ch = ch;
19         printf("請輸入%c的左子樹\n", ch);
20         createBiTree(&(*p) -> lchild);
21         printf("請輸入%c的右子樹\n", ch);
22         createBiTree(&(*p) -> rchild);
23     }
24 
25 }
26 void preOrderTraverse(PTree p)//前序遍歷
27 {
28     if(p == NULL)
29         return ;
30     printf("%c ", p -> ch);
31     preOrderTraverse(p -> lchild);
32     preOrderTraverse(p -> rchild);
33 }
34 void InOrderTraverse(PTree p)//中序遍歷
35 {
36     if(p == NULL)
37         return;
38     InOrderTraverse(p -> lchild);
39     printf("%c ", p -> ch);
40     InOrderTraverse(p -> rchild);
41 }
42 void BackOrderTraverse(PTree p)//后續遍歷
43 {
44     if(p == NULL)
45         return ;
46     BackOrderTraverse(p -> lchild);
47     BackOrderTraverse(p -> rchild);
48     printf("%c ", p -> ch);
49 }
50 int main()
51 {
52     PTree pt;
53     createBiTree(&pt);
54     preOrderTraverse(pt);
55     printf("\n");
56     InOrderTraverse(pt);
57     printf("\n");
58     BackOrderTraverse(pt);
59     printf("\n");
60     return 0;
61 }

 


免責聲明!

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



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