J - Tree Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Appoint description:
Description
You are to determine the value of the leaf node in a given binary tree that is the terminal node of a path of least value from the root of the binary tree to any leaf. The value of a path is the sum of values of nodes along that path.
3 2 1 4 5 7 6 3 1 2 5 6 7 4 7 8 11 3 5 16 12 18 8 3 11 7 16 18 12 5 255 255
1 3 255
題意:給你二叉樹的中序與後序,求從根到葉子所有值之和最小的葉子的值。
根據中序和後序遞歸建樹,直接遍歷即可。
#include#include int a[10001],b[10001]; int M,v; struct tree { int date; tree *l,*r; tree() { date=0; l=r=NULL; } }; tree* built(int *A,int *B,int n) { if(!n)return NULL; tree *now=new tree; int i=0; for(i=0;i 0)now->l=built(A,B+n-i,i);//遞歸建立左子樹 if(i r=built(A+i+1,B+1,n-i-1);//遞歸建立右子樹 now->date=B[0]; return now; } void del(tree *p) { if(!p)return; if(p->l)del(p->l); if(p->r)del(p->r); delete p; p=NULL; } void dfs(tree *Root,int sum) { if(Root==NULL)return ; //printf("%d ",Root->date); if(Root->l==NULL&&Root->r==NULL) { if(sum+Root->date date; v=Root->date; } } dfs(Root->l,sum+Root->date); dfs(Root->r,sum+Root->date); } int main() { char ch; tree *root; //freopen("in.txt","r",stdin); while(~scanf("%d",&a[0])) { root=NULL; int n=1; M=100000001; v=0; while((ch=getchar())!='\n') { scanf("%d",a+n);++n; } for(int i=n-1;i>=0;i--) { scanf("%d",b+i); } root=built(a,b,n); dfs(root,0); printf("%d\n",v); del(root); } return 0; }