uva 548 - Tree
来源:互联网 发布:淘宝快递单模板 编辑:程序博客网 时间:2024/05/29 04:36
这道是道基础的二叉树题目,可以说帮我好好巩固了二叉树递归遍历的思想,有个地方要注意,就是路径和的最小值一开始初始化一定要足够大,不然会WA,因为一个节点的数字大小最大就有1万了。这个地方一定要注意。还有就是解题的关键就是,当p=0且n-p-1=0时就到叶节点了,其实就是n=1,p=0的时候,写的谨慎点就是p<=0&&n-p-1<=0。此时就可以判断sum和min1的大小了。下面是ac 代码
#include<cstdio>#include<ctype.h>#include<algorithm>#include<iostream>#include<string.h>using namespace std;int inorder[10000+10],postorder[10000+10];int min1, record;void build(int n, int *s1, int *s2,int sum){ int p,i; if(n <= 0) return; for(i = 0;i < n; i++) if(s2[n-1] == s1[i]) p = i; sum+=s2[n-1]; if(p <= 0 && n-p-1 <= 0) { if(sum == min1) record = s2[0] > record ? record :s2[0]; if(sum < min1) { min1 = sum; record = s2[0]; } } build(p, s1, s2, sum); build(n-p-1, s1+p+1, s2+p, sum);}int main(){// freopen("input.txt","r",stdin); int n,i; char ch; while(scanf("%d",&inorder[0]) == 1) { ch = getchar(); for(i = 1; ch != '\n'; i++) { scanf("%d",&inorder[i]); ch = getchar(); } n = i; for(i = 0;i < n; i++) { scanf("%d",&postorder[i]); ch = getchar(); } min1 = record = 1000000;//这个千万不能设置小,特别是min1的值,因为一个节点最大是1万 //求到叶节点的路径和就可能非常大了 build(n,inorder,postorder,0); printf("%d\n",record); } return 0;}
0 0
- UVa 548 Tree
- uva 548 Tree
- uva 548 - Tree
- uva 548 - Tree
- UVa 548 - Tree
- uva 548 Tree
- uva 548 - Tree
- 数据结构 uva 548-Tree
- UVA 548 - Tree
- UVa 548 - Tree
- UVa 548 - Tree
- uva-548 Tree
- UVA 548 Tree
- UVA 548 tree
- uva 548 -Tree
- uva 548 Tree
- 548 - Tree (UVa OJ)
- UVA 548 Tree
- android内存管理机制(一)
- hadoop 数据排序
- cocoa设计模式
- 八皇后问题(参考算法竞赛入门经典)
- 第九讲 MFC的状态
- uva 548 - Tree
- 《设计模式其实很简单》 - 书摘精要
- CALayer_超经典的阐述原理
- C#开发微信门户及应用(3)--文本消息和图文消息的应答
- _allow_resetlogs_corruption的使用
- Java Web项目(Extjs)报错五
- js笔记之词法分析
- DataGuard和GoldenGate灾备方案对比
- Objective-C中单例模式(Singletons)的实现