码迷,mamicode.com
首页 > 编程语言 > 详细

C语言递归实现二叉树的先序、中序、后序遍历

时间:2014-12-06 15:15:33      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   on   

 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 }      

以如下二叉树为例,给出按先序次序输入二叉树中结点的值(字符),从而按照本文给出的算法构造二叉树。

bubuko.com,布布扣

输入字符的顺序是:-+a空格空格*b空格空格-c空格空格d空格空格/e空格空格f空格空格,即可验证本文提供的遍历算法。

C语言递归实现二叉树的先序、中序、后序遍历

标签:style   blog   http   io   ar   color   os   sp   on   

原文地址:http://www.cnblogs.com/mengwang024/p/4148196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!