输入一个二叉树的中序和后序遍历,请你输出一个叶子节点,该叶子节点到根的数值总和最小,且这个叶子是编号最小的那个。 输入: 您的程序将从输入文件中读取两行(直到文件结尾)。第一行是树的中序遍历值序列,第二行是树的后序遍历值序列。所有值将不同,大于零且小于或等于10000.二叉树的节1<=N<=10000。 输出: 对于每个树描述,您应该输出最小值路径的叶节点的值。存在多路径最小的情况下,您应该选择终端叶子节点上具有最小值的那条路径,且输出那个最小值的终端叶子。

代码如下:

#include <iostream>
#include <sstream>
using namespace std;
const int N = 10010;
int post_order[N], in_order[N], lch[N], rch[N];
//zhon  hou
int best_sum, best;
int n;bool read_line(int *a) {string line;if (!getline(cin, line))return false;stringstream ss(line);n = 0;//注意这里不能写成int n,因为后面要用到n,所以不要让n变成局部变量了int x;while (ss >> x)a[n++] = x;return n > 0;
}int build(int inL, int inR, int postL, int postR) {if (inL > inR)return 0;int root = post_order[postR];int k = inL;//注意这是k = inL,不是k = 0;while (in_order[k] != root)k++;int numLeft = k - inL;lch[root] = build(inL, k - 1, postL, postL + numLeft - 1);rch[root] = build(k + 1, inR, postL + numLeft, postR - 1);return root;
}void dfs(int u, int sum) {sum += u;if (!lch[u] && !rch[u])if (sum < best_sum || (sum == best_sum && u < best)) {best = u;best_sum = sum;}if (lch[u])dfs(lch[u], sum);if (rch[u])dfs(rch[u], sum);
}int main() {while (read_line(in_order)) {read_line(post_order);build(0, n - 1, 0, n - 1);best_sum = 999999999;dfs(post_order[n - 1], 0);cout << best << endl;}return 0;
}

UVA - 548 Tree相关推荐

  1. UVa 548 Tree(中序遍历+后序遍历)

    给一棵点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小.如果有多解,该叶子本身的权应尽量小.输入中每两行表示一棵树,其中第一行为中序遍 ...

  2. 43行代码AC——例题6-8 树(Tree,UVa 548)——解题报告

    励志用尽量少的代码做高效的表达. You are to determine the value of the leaf node in a given binary tree that is the ...

  3. 【练习】树(Tree, UVa 548)给一棵点带权(权值各不相同)的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小。

    给一棵点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小.如果有多解,该叶子本身的权应尽量小.输入中每两行表示一棵树,其中第一行为中序遍 ...

  4. (二叉树的遍历)Tree UVa 548

    题目: 给一棵点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序和后序遍 历,找一个叶子使得它到根的路径上的权和最小.如果有多解,该叶子本身的权应尽量小. 输入中每两行表示一棵树,其中第 ...

  5. Tree UVA - 548(二叉树递归遍历)

    题目链接:https://vjudge.net/problem/UVA-548 题目大意:给一颗点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序遍历和后序遍历,找一个叶子结点使得它到根 ...

  6. UVA 536——Tree Recovery

    题意:给定一颗树的先根遍历和中根遍历,然后求后根遍历. 思路:先根遍历的第一个为root,然后找到root在中根的位置,进而递归左右儿子求解. code: #include <iostream& ...

  7. UVA 10410——Tree Reconstruction

    题意:给定一颗树的BFS和DFS,求这棵的每个节点. 思路:用栈模拟维护.对应的BFS为每个节点到根节点的距离,然后比较当前节点和栈顶节点与根的距离,如果当前节点大,则为栈顶节点的孩子,否则弹出继续比 ...

  8. 【ICPC-75】uva 112 Tree Summing

    点击打开链接 题目意思:给定一个字符串,把字符串里面的数字建成一颗树,数字有可能是负号,所以这一题其实有很多可以学的,比如怎样输入会有多行,还有怎么建立一颗树,等等. 解题思路:我们用一个字符数组来存 ...

  9. UVa 112 - Tree Summing

    题目:给你一个数和一棵树,问时钟是否存在根到叶子的路径使得路径上的数字和与已知数相等. 分析:递归.栈.因为除了最外边的树外,其他都有两颗子树,直接递归求解即可. 如果存在一棵子树成立,即返回成立.注 ...

最新文章

  1. C++ 和C 语言混合代码导致的问题
  2. 计算机电容的作用,电容和电感的作用
  3. 更改as的默认gradle地址_面试官:谈谈这4种磁盘IO调度算法--CFQ、NOOP、Deadline、AS...
  4. 人生感悟:一个男人必须具有的东西
  5. 自己动手实现山东大学QLSC_STU无线网络掉线后自动重连
  6. 服务器数据库端口修改方法,如何修改云服务器数据库端口
  7. 学好数学建模,走哪买菜都不怕!
  8. PspNet在MMsegmentation框架下成功训练Pascal VOC2012数据集及踩坑实录
  9. 精通 R plot—第1部分:颜色,图例和线
  10. java日志与业务分离_java日志分开打印
  11. C++---deque双端队列
  12. 【问】如何应对关系型数据库中列的不断增加
  13. UWP控件——StackPanel堆叠面板的使用
  14. java fit 16s,16s分析之差异OTU 挑选(edgeR)
  15. 第六周作业1——利用哈夫曼编码英文字母表
  16. win10系统安装到服务器失败,win10安装失败怎么办?
  17. web前端 html+css+javascript游戏网页设计实例 (网页制作课作业)
  18. EasyAR_SDK在unity制作ar视频黑屏,只有声音问题
  19. cmd执行bat结果不回显_让bat批处理后台运行,不显示cmd窗口(完全静化)
  20. SSM+信息安全资讯网站 毕业设计-附源码191651

热门文章

  1. 「博客之星」评选,互投5星,留链必投
  2. Android之基于xmpp openfire smack开发之openfire介绍和部署[1]
  3. Android 之自定义view实现水波纹效果
  4. 命令注入_命令注入绕过方式总结
  5. 100以内素数之和python123_python质数,水仙花数,简单猜拳游戏等
  6. 神奇又好玩的谢尔宾斯基雪花!
  7. 没有女朋友,可能是因为你数学不好
  8. 用3年时间破解学界200多年难题,年仅21岁的天才竟因谈了一场恋爱挂掉了.........
  9. 机器学习资料升级版来了!!!
  10. 有了它,从此成为自带BGM的主角~