程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C語言遞歸實現二叉樹的先序、中序、後序遍歷,遞歸二叉樹

C語言遞歸實現二叉樹的先序、中序、後序遍歷,遞歸二叉樹

編輯:C++入門知識

C語言遞歸實現二叉樹的先序、中序、後序遍歷,遞歸二叉樹


 1 #include <stdio.h>    
 2 #include <stdlib.h>    
 3 //*****二叉樹的二叉鏈表存儲表示*****//    
 4 typedef struct BiNode    
 5 {    
 6     char data;    
 7     struct BiNode *lchild, *rchild;    
 8 }BiNode, *BiTree;    
 9   
10 //*****按先序次序輸入二叉樹中結點的值(一個字符),空格字符表示空樹構造二叉鏈表表示的二叉樹T*****//     
11 void CreateBiTree(BiTree &T)            
12 {                                       
13     char ch;    
14     scanf("%c", &ch);    
15     if(ch == ' ')    
16     {    
17         T = NULL;    
18     }    
19     else    
20     {    
21         if(!(T = (BiNode *)malloc(sizeof(BiNode))))     
22         {    
23             return;    
24         }    
25         T->data = ch;                    //生成根結點    
26         CreateBiTree(T->lchild);     //構造左子樹    
27         CreateBiTree(T->rchild);     //構造右子樹    
28     }    
29       
30     return;    
31 }    
32   
33 //*****先序遍歷二叉樹*****//     
34 void PreOrderTraverse(BiTree T)    
35 {    
36     if(!T)     
37     {    
38         return;                             //若T為空樹,則直接返回    
39     }    
40     printf("%c ", T->data);                  //訪問根結點    
41     PreOrderTraverse(T->lchild);         //先序遍歷左子樹    
42     PreOrderTraverse(T->rchild);         //先序遍歷右子樹    
43       
44     return;    
45 }    
46   
47 //*****中序遍歷二叉樹*****//     
48 void InOrderTraverse(BiTree T)    
49 {    
50     if(!T)    
51     {    
52         return;                             //若T為空樹,則直接返回    
53     }    
54     InOrderTraverse(T->lchild);              //中序遍歷左子樹    
55     printf("%c ", T->data);                  //訪問根結點    
56     InOrderTraverse(T->rchild);              //中序遍歷右子樹    
57       
58     return;    
59 }    
60   
61 //*****後序遍歷二叉樹*****//     
62 void PostOrderTraverse(BiTree T)    
63 {    
64     if(!T)    
65     {    
66         return;                             //若T為空樹,則直接返回    
67     }    
68     PostOrderTraverse(T->lchild);            //後序遍歷左子樹    
69     PostOrderTraverse(T->rchild);            //後序遍歷右子樹    
70     printf("%c ", T->data);                  //訪問根結點    
71       
72     return;    
73 }    
74   
75 int main(void)    
76 {    
77     BiTree T;        
78     printf("請按先序次序輸入二叉樹中結點的值(字符),空格字符表示空樹:\n");    
79     CreateBiTree(T);        
80       
81     printf("先序遍歷結果為:");    
82     PreOrderTraverse(T);    
83     printf("\n\n");     
84       
85     printf("中序遍歷結果為:");    
86     InOrderTraverse(T);    
87     printf("\n\n");     
88       
89     printf("後序遍歷結果為:");    
90     PostOrderTraverse(T);        
91     printf("\n\n");        
92       
93     return 0;        
94 }      

以如下二叉樹為例,給出按先序次序輸入二叉樹中結點的值(字符),從而按照本文給出的算法構造二叉樹。

輸入字符的順序是:-+a空格空格*b空格空格-c空格空格d空格空格/e空格空格f空格空格,即可驗證本文提供的遍歷算法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved