UVA
来源:互联网 发布:为什么dota2知乎 编辑:程序博客网 时间:2024/06/04 19:14
题意 : 给你一颗二叉树,给定中序和后序,求叶子结点到根结点的最小值。
思路:由中序和后序求树,然后dfs~
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <sstream>#include <queue>using namespace std;#define maxn 10010#define inf 0x3f3f3f3fint in[maxn];int pos[maxn];struct btnode{ int v,l,r; btnode(){} btnode(int a,int b = -1,int c = -1) { v = a; l = b; r = c; }}tree[maxn];int treenum = 0;int buildtree(int i,int inum, int p,int pnum){ if(inum <= 0) return -1; int rv = pos[p+pnum-1]; int root = treenum++; tree[root].v = rv; int j = i; while(in[j] != rv && j < i+inum-1) j++; int lnum = j-i, rnum = i+inum-j-1; tree[root].l = buildtree(i,lnum,p,lnum); tree[root].r = buildtree(j+1,rnum,p+lnum,rnum); return root;}int bfs(){ queue<int> q; q.push(0); while(!q.empty()) { int temp = q.front(); q.pop(); cout<<tree[temp].v<<' '; if(tree[temp].l != -1) q.push(tree[temp].l); if(tree[temp].r != -1) q.push(tree[temp].r); }}int imin = inf,ans = -1;void dfs(int n,int sum){ if(tree[n].l == -1 && tree[n].r == -1) { if(sum < imin) imin = sum, ans = tree[n].v; else if(sum == imin) imin = sum, ans = min(tree[n].v,ans); return; } else { if(tree[n].l != -1) dfs(tree[n].l,sum+tree[tree[n].l].v); if(tree[n].r != -1) dfs(tree[n].r,sum+tree[tree[n].r].v); }}int main(){ string mid; while(getline(cin,mid)) { treenum = 0; stringstream ss; ss << mid; int midnum = 0; int temp; while(ss >> temp) in[midnum++] = temp; for(int i = 0; i < maxn; i++) tree[i] = btnode(0); for(int i = 0; i < midnum; i++) scanf("%d",&pos[i]); getchar(); ans = -1,imin = inf; buildtree(0,midnum,0,midnum); dfs(0,tree[0].v); printf("%d\n",ans); } return 0;}
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- GDOI2017模拟一试
- Python 绘图 Matplotlib 快速参考手册
- pandas中如何计算一个时间序列有多少天
- 数据库
- JS中的流程控制 优就业
- UVA
- javascript中map、foreach、reduce、filter间区别?
- Mysql单表性能测试(分表依据)
- 初识http、https、TCP/IP、Socket网络通信
- 四种环境下编译nanomsg库
- C语言实现词法分析器
- WKWebView浅析
- Spring mvc +miniUI 前后台交互 报415错误
- UIWebView显示网页没有置顶显示