Shirlies
宁静专注认真的程序媛~

二叉树的基本题型,不过对于我来说还是有点考验的……

#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;
}

posted on 2012-02-03 12:05  Shirlies  阅读(653)  评论(0编辑  收藏  举报