uva 548 Tree

来源:互联网 发布:普华在线网络课程 编辑:程序博客网 时间:2024/06/11 17:11
求从根节点开始到叶子节点和的最小值,用中序和后序的性质建树,中序根节点左右分别是左右子树,后序最后的点是根节点,递归找最小值的叶子
#include<stdio.h>#include<string.h>#include<stdlib.h>#define  MAXN 100010int mid[MAXN],post[MAXN],leaf,min;void find(int mi,int mj,int pi,int pj,int sum){if(mj<mi)return;int i;int pos;if(mi==mj){sum+=mid[mi];if(min==sum&&leaf>mid[mi])leaf=mid[mi];else if(min>sum){min=sum;leaf=mid[mi];}}else{for(i=mi;i<=mj;i++)if(mid[i]==post[pj]){pos=i;break;}sum+=post[pj];find(mi,pos-1,pi,pi+pos-mi-1,sum);find(pos+1,mj,pi+pos-mi,pj-1,sum);}}int main(){int i,j;char ch;i=0;while(scanf("%d%c",&mid[i++],&ch)==2){if(ch==32)continue;if(ch=='\n'){for(j=0;j<i;j++)scanf("%d",&post[j]);//getchar();min=99999999;leaf=9999999;    find(0,i-1,0,i-1,0);printf("%d\n",leaf);i=0;}}return 0;}

原创粉丝点击