二叉树的基本题型,不过对于我来说还是有点考验的……
#include "stdio.h"
int inorder[10005];
int postorder[10005];
int sum;
int min1,min2;
int find(int a,int *p,int n)
{
int i;
for(i=n-1;i>=0;i--)
if(p[i]==a)
return i;
return 0;
}
void tree_min_node(int n,int *d1,int *d2,int sum)
{
int k;
if(n<=0) return;
k=find(d1[n-1],d2,n);
sum+=d1[n-1];
if(k<=0&&n-1-k<=0)
{
if(sum==min1)
min2=(d1[n-1]<min2?d1[n-1]:min2);
else if(sum<min1)
{
min1=sum;
min2=d1[n-1];
}
return ;
}
tree_min_node(k,d1,d2,sum);
tree_min_node(n-1-k,d1+k,d2+k+1,sum);
}
int main()
{
int n,i;
char ch;
while(scanf("%d",&inorder[0])==1)
{
ch=getchar();
i=1;
min1=100000;
min2=100000;
while(ch!='\n')
{
scanf("%d",&inorder[i]);
i++;
ch=getchar();
}
n=i;
for(i=0;i<n;i++)
{
scanf("%d",&postorder[i]);
}
tree_min_node(n,postorder,inorder,0);
printf("%d\n",min2);
}
return 0;
}