poj 2255 二叉树的后序遍历
2015-01-23 21:02
232 查看
2015/1/23
根据 二叉树的先序和中序遍历建立二叉树后输出后序遍历。
根据 二叉树的先序和中序遍历建立二叉树后输出后序遍历。
#include<map> #include<queue> #include<stack> #include<cmath> #include<vector> #include<climits> #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; #define mod 10007 #define lson pos<<1,l,mid #define sc(n) scanf("%d",&n) #define rson pos<<1|1,mid+1,r #define pr(n) printf("%d\n",n) #define met(n,m) memset(n, m, sizeof(n)) #define F(x,y,i) for(int i = x;i > y; i--) #define f(x,y,i) for(int i = x;i < y; i++) #define ff(x,y,i) for(int i = x;i <= y; i++) #define FF(x,y,i) for(int i = x;i >= y; i--) const int N=100500; const int inf = INT_MAX; int Max(int a,int b) { return a>b?a:b; } int Min(int a,int b) { return a<b?a:b; } char s1[100],s2[100]; int root[1000],r[1000],l[1000]; int len , tp , tot; int find(int x) { f(0,len,i) { if(s1[x] == s2[i]) { return i; } } return 0; } void bfs(int L,int R) { root[tp] = tp; int fa = tp; int mid = find(tp); tp++; if(mid > L) { l[fa] = tp; bfs(L,mid-1); } if(mid < R) { r[fa] = tp; bfs(mid+1,R); } } int sum = 0; void dfs(int x) { if(l[x]) { dfs(l[x]); } if(r[x]) { dfs(r[x]); } printf("%c",s1[root[x]]); } int main() { int n, m, tot, x; while(~scanf("%s%s",s1,s2)) { len = strlen(s1); met(root,0); met(l,0); met(r,0); tp = 0; bfs(0,len-1); dfs(0); printf("\n"); } return 0; }
相关文章推荐
- 二叉树之已知前序和中序遍历求后序遍历(POJ &&HDU )
- POJ 2255 Tree Recovery [二叉树]
- POJ 2255 Tree Recovery 二叉树恢复
- poj 2255 二叉树 已知先序和中序,求后序
- POJ 2255 Tree Recovery(二叉树)
- POJ 2255 二叉树遍历 已知前序遍历 中序遍历 求后序遍历
- POJ 2255(二叉树问题)
- poj 2255:重建二叉树
- POJ 2255Tree Recovery 二叉树重建(根据前序遍历和中序遍历写出后序遍历)
- POJ 2255 Tree Recovery(二叉树重建)
- POJ 2255 Tree Recovery 二叉树的遍历
- poj2255 根据任意二叉树的先序遍历和中序遍历求解后序遍历
- POJ 2255/hrbust 2022 Tree Recovery【dfs、二叉树的层次遍历】
- POJ 2255 Tree Recovery(根据前中序遍历,求后序遍历)
- poj-2255 已知数的前序与中序遍历序列,求后序遍历序列
- poj 2255 Tree Recovery(求后序遍历,二叉树)
- POJ 2255 Tree Recovery 二叉树
- POJ2255,Tree Recovery,二叉树重建
- POJ 2255 Tree Recovery 二叉树基础
- 二叉树的探索 poj 2255