Description
Tree |
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<stdio.h> #include<cstring> 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<n;i++)if(A[i]==B[0])break;//找到根在中序遍历中的位置 if(i>0)now->l=built(A,B+n-i,i);//递归建立左子树 if(i<n-1)now->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<M) { M=sum+Root->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; }
UVA 548(二叉树重建与遍历),布布扣,bubuko.com
原文地址:http://blog.csdn.net/u013268685/article/details/27554837