uva 548

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

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

转载于:https://www.cnblogs.com/Shirlies/archive/2012/02/03/2336851.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值