二叉树后序遍历和层次遍历

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

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

 已知先序和中序序列,求后序序列

从先序遍历中读入根节点;然后从中序遍历中找到与根节点相等的元素,将中序序列分成两个部分,左边的为二叉树的左子树,右边为二叉树的右子树;最后递归调用得到根节点的左右子树

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