Uva 548
#include<iostream> #include<malloc.h> #include<cstdio> using namespace std; const int maxn=10000+10; int minn,ans=0; typedef struct node { int data; struct node *left,*right; }bitnode,*bitree; void createtree(bitree *T,int *in,int *post,int len) { int k; int *temp; if(len<=0) { *T=NULL; return ; } for(temp=in;temp<in+len;temp++) { if(*(post+len-1)==*temp) { k=temp-in; (*T)=(bitnode*)malloc(sizeof(bitnode)); (*T)->data=*temp; break; } } createtree(&((*T)->left),in,post,k); createtree(&((*T)->right),in+k+1,post+k,len-k-1); } void dfs(bitree T,int n) { if(T) { n+=T->data; if(!T->left&&!T->right) { if(n<=minn) { minn=n; ans=T->data; } return ; } if(T->left)dfs(T->left,n); if(T->right)dfs(T->right,n); } else return; } void destroyTree(bitree root) { if(NULL==root) return ; destroyTree(root->left); destroyTree(root->right); delete root; } int main() { while(true) { bitree T; char ch; int len; int in[maxn],post[maxn]; T=NULL; int temp,i=0,j; while(true) { cin>>temp; ch=getchar(); in[i++]=temp; if(ch=='\n') break; } len=i; i=0; while(true) { cin>>temp; ch=getchar(); post[i++]=temp; if(ch=='\n')break; } createtree(&T,in,post,len); minn=2147483647; dfs(T,0); cout<<ans<<endl; destroyTree(T); } return 0; }
一直runtime error,不知道为什么