【二叉树】POJ 2255
2011-10-26 13:09
274 查看
题意很简单,给出一棵树的前序&中序遍历,输出后续遍历。
首先我们来研究一下第一个sample:
DBACEGF ABCDEFG
前序遍历是先是从根节点->左子树->右子树;而中序遍历则是左子树->根节点->右子树。所以DBACEGF中D是根, ABC D
EFG 中序可以找左子树&右子树,此时把D放在输出数组的最后一个,然后先递归处理右子树再处理左子树。
首先我们来研究一下第一个sample:
DBACEGF ABCDEFG
前序遍历是先是从根节点->左子树->右子树;而中序遍历则是左子树->根节点->右子树。所以DBACEGF中D是根, ABC D
EFG 中序可以找左子树&右子树,此时把D放在输出数组的最后一个,然后先递归处理右子树再处理左子树。
#include <map> #include <set> #include <list> #include <queue> #include <deque> #include <stack> #include <string> #include <time.h> #include <cstdio> #include <math.h> #include <iomanip> #include <cstdlib> #include <limits.h> #include <string.h> #include <iostream> #include <fstream> #include <algorithm> using namespace std; #define LL long long #define MIN INT_MIN #define MAX INT_MAX #define PI acos(-1.0) #define FRE freopen("input.txt","r",stdin) #define FF freopen("output.txt","w",stdout) #define N 30 char pre ; char in ; char ans ; int len; void gao(int s1, int s2, int t1, int t2){ int i; if(s1 > s2)return ; for(i = t1; i <= t2; i++){ if(in[i] == pre[s1]){ break; } } ans[--len] = pre[s1]; if(s1 == s2){ return ; } gao(s1 + i - t1 + 1, s2, i + 1, t2); gao(s1 + 1, s1 + i - t1, t1, i - 1); } int main(){ while(scanf("%s%s",pre,in) != EOF){ int i,j; len = strlen(pre); memset(ans,'\0',sizeof(ans)); gao(0,len - 1,0,len - 1); printf("%s\n",ans); } return 0; }
相关文章推荐
- poj 2255 二叉树的后序遍历
- POJ 2255 Tree Recovery ( 二叉树)
- 【POJ 2255 Tree Recovery】+ 二叉树
- 二叉树的探索 poj 2255
- poj2255 根据二叉树的前序和中序遍历 求出树的后序遍历
- POJ 2255 Tree Recovery 二叉树
- POJ 2255 Tree Recovery [二叉树]
- POJ 2255 根据二叉树的前序和中序序列来重建二叉树
- A - Tree Recovery POJ - 2255 (二叉树)
- POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)
- POJ 2255 Tree Recovery 二叉树的遍历
- POJ 2255 经典的重建二叉树
- POJ 2255 Tree Recovery 二叉树恢复
- 通过遍历求解二叉树结构poj2255
- ACM--二叉树-已知前中序求后序--POJ-2255
- POJ 2255/hrbust 2022 Tree Recovery【dfs、二叉树的层次遍历】
- poj 2255 Tree Recovery(二叉树的遍历)
- poj2255 根据任意二叉树的先序遍历和中序遍历求解后序遍历
- poj2255 二叉树给出先序中序求后序序列
- POJ 2255 Tree Recovery【二叉树重建】