题目
答案
#include<iostream>
#include<malloc.h>
using namespace std;
char pre[50],mid[50];
typedef struct Tree* tree;
struct Tree{
char data;
tree left,right;
};
tree build_tree(int root,int start,int end)
{
if(start>end) return NULL;
int i;
for(i=start;i<=end;i++)
if(mid[i]==pre[root]) break;
tree tmp;
tmp=(tree)malloc(sizeof(struct Tree));
tmp->data=pre[root];
tmp->left=build_tree(root+1,start,i-1);
tmp->right=build_tree(root+1+i-start,i+1,end);
return tmp;
}
int get_height(tree tmp)
{
if(!tmp) return 0;
else
{
int l=get_height(tmp->left)+1;
int r=get_height(tmp->right)+1;
return l>r?l:r;
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>pre[i];
for(int i=0;i<n;i++)
cin>>mid[i];
cout<<get_height(build_tree(0,0,n-1));
}
注意
- 在函数中创建的tmp结构体变量要记得动态分配内存(即malloc)
- buildTree函数最后记得返回tmp
最后
这道的思路和给出后序和中序求前序的题目思路是一致的,详情可参考下面这篇文章