
#include<stdio.h> |
#include<malloc.h> |
#include<string.h> |
void exit(int); |
#define MAX 100 |
typedef struct node { |
char d; |
struct node *lchild, *rchild; |
} Tnode; |
void MK(char in[], char is, char ie, char pre[], char pres, char pree, Tnode **r) { |
int i; |
if(is > ie || pres > pree) |
*r = NULL; |
else { |
*r = malloc(sizeof(Tnode)); |
(*r)->d = pre[pres]; |
for(i = is; i <= ie; i++) { |
if(in[i] == pre[pres]) { |
MK(in, is, i - 1, pre, pres + 1, pres + i - is, &(*r)->lchild); |
MK(in, i + 1, ie, pre, pres + i - is + 1, pree, &(*r)->rchild); |
break; |
} |
if(i > ie) { |
printf("输入错误!\n"); |
exit(1); |
} |
} |
} |
} |
void postorder(Tnode *r) { |
if(r) { |
postorder(r->lchild); |
postorder(r->rchild); |
printf("%c", r->d); |
} |
} |
int leaf(Tnode *r) { |
if(r == NULL) |
return 0; |
else if(r->lchild == NULL && r->rchild == NULL) |
return 1; |
else |
return leaf(r->lchild) + leaf(r->rchild); |
} |
int height(Tnode *r) { |
int h1, h2; |
if(r == NULL) |
return 0; |
else { |
h1 = height(r->lchild); |
h2 = height(r->rchild); |
return 1 + (h1 > h2 ? h1 : h2); |
} |
} |
void main() { |
Tnode *r = NULL; |
char in[MAX], pre[MAX]; |
printf("请输入前序序列:\n"); |
gets(pre); |
printf("请输入中序序列:\n"); |
gets(in); |
MK(in, 0, strlen(in) - 1, pre, 0, strlen(pre) - 1, &r); |
printf("\n后序遍历序列为:\n"); |
postorder(r); |
printf("\n叶结点的个数为:%d\n", leaf(r)); |
printf("\n高度为:%d\n", height(r)); |
} |



