Uva-536 Tree Recovery
2015-09-10 01:01
519 查看
题目链接:Tree Recovery
题目大意:已知一棵树的先序遍历和中序遍历顺序,求它的后序遍历顺序。
解题思路:关键在于找到父结点的位置,然后递归建树即可。
代码如下:
题目大意:已知一棵树的先序遍历和中序遍历顺序,求它的后序遍历顺序。
解题思路:关键在于找到父结点的位置,然后递归建树即可。
代码如下:
#include <map> #include <stack> #include <queue> #include <cstdio> #include <vector> #include <sstream> #include <cstdlib> #include <cstring> #include <iomanip> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; typedef pair<int, int> P; const int inf = 0x3f3f3f3f; const int maxn = 1e4 + 15; int rch[maxn], lch[maxn], root; string Prt, In, s; void Init(){ memset(lch, 0, sizeof lch); memset(rch, 0, sizeof rch); } void Build(const string& a, const string& b){ if(a.size() <= 1 || b.size() <= 1) return; int rt = b[0]; auto it = find(a.begin(), a.end(), rt); string la(a.begin(), it); ++it; string ra(it, a.end()); int l = la.size(), r = ra.size(); string lb(b.begin() + 1, b.begin() + l + 1); string rb(b.begin() + l + 1, b.begin() + l + r + 1); if(!lb.empty()) lch[rt] = lb[0]; if(!rb.empty()) rch[rt] = rb[0]; Build(la, lb); Build(ra, rb); } void Print(int u){ if(lch[u] > 0) Print(lch[u]); if(rch[u] > 0) Print(rch[u]); cout << (char)u; return; } int main(){ ios::sync_with_stdio(false); #ifdef LOCAL freopen("in.txt", "r", stdin); #endif while(getline(cin, s)){ Init(); stringstream ss(s); ss >> Prt; ss >> In; root = Prt[0]; Build(In, Prt); Print(root); cout << endl; } return 0; }
相关文章推荐
- WDK-build 添加Listing file type:assembly,Machine Code,and Source
- C++ 一个程序获取另一个程序Edit控件的内容
- 使用aspose.cell动态导出多表头 EXCEL
- Debian (Jessie 8.0) mysql can't connect to local mysql server through socket '/var/run/mysqld/mysqld
- Windows 强制指定程序使用 普通权限(invoker调用者权限)运行的方法
- 分布式集群管理—认知
- PE-43(枚举)
- 黑马程序员 使用final修饰一个变量时,是引用不能变还是引用对象不能变
- HDU3461_Code Lock
- uLua bug fix
- 工作模块功能总结(15)
- 当···时发生了什么?
- 初步13-坐标转换
- UVa-10003 - Cutting Sticks
- lucas 定理学习
- CD4541B定时器的使用方法
- Uva-12118 Inspector's Dilemma
- oracle:通过触发器实现对数据库对象增删改动作的审计
- 多线程的实现方式和安全性
- 创建本地SVN版本库以及将SVN导入GIT