【hiho一下 第十周】后序遍历
2017-10-04 18:44
274 查看
【题目链接】:http://hihocoder.com/problemset/problem/1049
【题意】
【题解】
前序遍历的第一个节点;
肯定是整颗树的头结点;
然后在中序遍历中;
得到这个树的左子树和右子树;
然后再分别得到左子树和右子树的前序遍历;
递归处理就好;
【Number Of WA】
0
【完整代码】
#include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define mp make_pair #define pb push_back #define fi first #define se second #define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii; typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1}; const int dy[9] = {0,0,0,-1,1,-1,1,-1,1}; const double pi = acos(-1.0); const int N = 110; int root,l[30],r[30]; string s1,s2; int dfs(string s1,string s2) { if (s1==""||s2=="") return 0; char t = s1[0]; int x = t-'A'+1; int pos = s2.find(t,0); int llen = pos,rlen = s2.size()-llen-1; l[x] = dfs(s1.substr(1,llen),s2.substr(0,llen)); r[x] = dfs(s1.substr(1+llen,rlen),s2.substr(pos+1,rlen)); return x; } void dfs(int x) { if (x==0) return; dfs(l[x]);dfs(r[x]); char t = x+'A'-1; cout << t; } int main() { //freopen("F:\\rush.txt","r",stdin); ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use cin >> s1 >> s2; root = dfs(s1,s2); dfs(root); cout << endl; return 0; }
相关文章推荐
- hiho第十周——后序遍历
- HihoCoder第十周:后序遍历
- HihoCoder第十周:后序遍历
- 第十周项目三 后序遍历二叉树
- [hiho]后序遍历
- 二叉搜索树的后序遍历序列 【微软面试100题 第九题】
- 5-2 根据后序和中序遍历输出先序遍历 (25分)
- hiho一下 第二十一周 离散化与线段树回顾
- 二叉搜索树的后序遍历序列
- C语言实现 前序、中序、后序遍历二叉树
- 剑指Offer——(23)二叉搜索树的后序遍历序列
- 判断排序二叉树的后序遍历是否正确(对递归算的总结)
- hiho一下 第三周---KMP算法
- 经典算法之非递归算法实现二叉树前、中、后序遍历
- pat甲1119. Pre- and Post-order Traversals (已知前序和后序遍历求中序遍历)
- 03-树3. Tree Traversals Again (25)将先序遍历和中序遍历转为后序遍历
- 动态二叉树的先序、中序、后序和层序遍历及转换为静态二叉树
- 二叉树前序、中序和后序非递归遍历的方法
- 二叉搜索树的后序遍历序列
- Lintcode 68 二叉树的后序遍历