[c++]代码库
#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));
}