UVA548
题意:
根据二叉树中序和后序建立二叉树,从根结点开始计算和到叶子结点,输出总和最小的叶子结点,如果有俩个和一样大,输出叶子结点最小的
AC:80ms
#include<stdio.h>
#include<iostream>
#include <strstream>
#include<string>
#include<memory.h>
#include<sstream>
using namespace std;
struct Tree
{
int curTotal;
Tree()
{
curTotal = 0;
}
};
void buildTree(const int* in, const int* post, int curTotal, int* minTotal,
int tl, int * leaf);
int readInt(string str, int * const a)
{
istringstream in(str);
int i;
int total = 0;
while (in >> i)
a[total++] = i;
return total;
} int main()
{
//freopen("d:\\1.txt", "r", stdin);
string str1, str2;
while (getline(cin, str1))
{
getline(cin, str2);
int inorder[100000];
int postorder[100000];
int tl = readInt(str1, inorder);
readInt(str2, postorder);
int min = 0x7FFFFFFF;
int leaf = 0x7FFFFFFF;
buildTree(inorder, postorder, 0, &min, tl, &leaf);
cout << leaf << endl;
}
}
void buildTree(const int* in, const int* post, int curTotal, int* minTotal,
int tl, int * leaf)
{
if (tl == 0)
return;
int cur = -1;
for (int i = 0; i < tl; i++)
{
if (in[i] == post[tl - 1])
{
cur = i;
break;
}
}
//左孩子长度cur
int left = cur;
//right长度 tl-cur-1
int right = tl - cur - 1;
curTotal += in[cur];
if (tl == 1)
{
if (curTotal <= *minTotal)
{
*minTotal = curTotal;
*leaf = in[cur];
}
} //left
buildTree(in, post, curTotal, minTotal, left, leaf);
//right
buildTree(in + left + 1, post + left, curTotal, minTotal, right, leaf);
}
UVA548的更多相关文章
- 【日常学习】【二叉树遍历】Uva548 - Tree题解
这道题目本身不难,给出后序遍历和中序遍历,求到节点最小路径的叶子,同样长度就输出权值小的叶子. Uva上不去了,没法測.基本上是依照ruka的代码来的.直接上代码 //Uva548 Tree #inc ...
- 例题6-8 Tree Uva548
这道题我一直尝试用scanf来进行输入,不过一直没有成功,因此先搁置一下,以后积累些知识再进行尝试. 这道题有两种解决方案: 即先建树,再遍历和边建树边遍历.这两种方案经过实践证实效率相差不太多.应该 ...
- UVA548——Tree(中后序建树+DFS)
Tree You are to determine the value of the leaf node in a given binary tree that is the terminal nod ...
- 二叉树的递归遍历 Tree UVa548
题意:给一棵点带权的二叉树的中序和后序遍历,找一个叶子使得他到根的路径上的权值的和最小,如果多解,那该叶子本身的权值应该最小 解题思路:1.用getline()输入整行字符,然后用stringstre ...
- UVA548 tree的思路
唔,首先这题给出了中序遍历和后序遍历要求我们求出, 一个叶子节点到根的数值总和最小,且这个叶子节点是最小的那个 这题的难点在于如何运用中序遍历和后序遍历还原整棵树, 这里有两个方法: 1. 递归构造原 ...
- 6-8 树 uva548
read 的方式值得学习 当不知道每一行有多少个输入的时候 getline 在弄成stringstream!一个一个处理 用built递归的方式化大为小进行建立树 dfs 遍历整个树来求最值 变量的 ...
- 如何求先序排列和后序排列——hihocoder1049+洛谷1030+HDU1710+POJ2255+UVA548【二叉树递归搜索】
[已知先序.中序求后序排列]--字符串类型 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在这一周遇到的问题便是:给出一棵二叉树的前序和 ...
- UVA548 Tree (二叉树的遍历)
You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...
- UVA548(二叉树遍历)
You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...
随机推荐
- HDU 1024:Max Sum Plus Plus(DP,最大m子段和)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- CTF-练习平台-Misc之 Linux??????
八.Linux?????? 下载文件,解压后只得到一个没有后缀名的文件,添加后缀名为txt,打开搜索,关键词为“flag”,没有找到:改关键词为“key”得到答案
- 《DSP using MATLAB》Problem 4.1
用到的z变换的计算公式: 代码: %% ------------------------------------------------------------------------ %% Outp ...
- Java8 (Function,Consumer,Predicate,Supplier)详解
1. https://blog.csdn.net/lzm18064126848/article/details/70199769 1.1 https://blog.csdn.net/turbo_zon ...
- width百分比
table中的td可以在页面中直接在元素上设置width:但是li不能只能在页面中写style: <!-- <li width="20%" class="p- ...
- struts神马的不过是对servlet、filter的封装而已,hibernate神马的也不过是对jdbc的封装而已,他们只是把一些常见的操作流程化了,如果不懂servlet、filter,不懂jdbc,使用struts和hibernate出问题了都不知道是怎么回事。
struts神马的不过是对servlet.filter的封装而已,hibernate神马的也不过是对jdbc的封装而已,他们只是把一些常见的操作流程化了,如果不懂servlet.filter,不懂jd ...
- filesystems\configfs\configfs.txt 翻译Android下的
configfs - 用户空间驱动的内核对象配置. Joel Becker <joel.becker@oracle.com>Updated: 31 March 2005Copyright ...
- Json.NET Updates: Merge, Dependency Injection, F# and JSONPath Support
Json.NET 6.0 received 4 releases this year, the latest last week. Over these releases, several new f ...
- hadoop之 exceeds the limit of concurrent xcievers处理
dfs.datanode.max.transfer.threads: 默认 4096 < 2.0之前该参数为dfs.datanode.max.xcievers >解释:Specifies ...
- Debug---Eclipse断点调试基础
1.进入debug模式(基础知识列表)1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ========================= ...