二叉树的建立与遍历

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2136&cid=1145

View Code
 1 #include<stdio.h>   
 2 #include<malloc.h>   
 3 typedef struct node   
 4 {   
 5     char data ;   
 6     struct node *l, *r ;   
 7 }tree ;   
 8 tree *t ;   
 9 tree *creat(tree *t)   
10 {   
11     char c ;   
12     if((c = getchar())==',')   
13     return NULL ;   
14     else  
15     {   
16         t = (tree*)malloc(sizeof(tree)) ;   
17         t->data  = c ;   
18         t->l = creat(t->l) ;   
19         t->r = creat(t->r) ;   
20     }   
21     return t ;   
22 }   
23 void midsearch(tree *t)   
24 {   
25     if(t!=NULL)   
26     {   
27         midsearch(t->l) ;   
28         printf("%c", t->data) ;   
29         midsearch(t->r) ;   
30     }   
31 }   
32 void lastsearch(tree *t)   
33 {   
34     if(t!=NULL)   
35     {   
36         lastsearch(t->l) ;   
37         lastsearch(t->r) ;   
38         printf("%c", t->data) ;   
39     }   
40 }   
41 int leaf(tree *t)   
42 {   
43     if(t==NULL)   
44     return 0 ;   
45     if(t->l==NULL&&t->r==NULL)   
46     return 1 ;   
47     else return(leaf(t->l)+leaf(t->r)) ;   
48 }   
49 int deep(tree *t)   
50 {   
51     if(t==NULL)   
52     return 0 ;   
53     int m, n ;   
54     m = deep(t->l) ;   
55     n = deep(t->r) ;   
56     if(m>n)   
57     return m+1 ;   
58     else return n+1 ;   
59 }   
60 int main()   
61 {   
62     tree *p ;   
63     int leafs ;   
64     p = creat(t) ;   
65     midsearch(p) ;   
66     puts("") ;   
67     lastsearch(p) ;   
68     puts("") ;   
69     leafs = leaf(p) ;   
70     printf("%d\n", leafs) ;   
71     printf("%d\n", deep(p)) ;   
72     return 0 ;   
73 }   

 

posted @ 2013-02-19 20:38  yelan@yelan  阅读(198)  评论(0编辑  收藏  举报