QUDOJ-78 重建二叉树 (中序后续推前序)
2013-12-21 19:26
218 查看
Problem 78: 重建二叉树
Time Limit:1 Ms| Memory Limit:100 MBDifficulty:0
Description
题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。
Input
输入有多组数据(少于100组),以文件结尾结束。每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)
Output
每组输出数据单独占一行,输出对应得先序序列。
Sample Input
ACBFGED ABCDEFGCDAB CBAD
Sample Output
DBACEGFBCAD
思路:
同之前写过的前序中序推后序;
http://blog.csdn.net/tbl_123/article/details/13631837
代码:
#include <stdio.h>
#include <string.h>
#define N 30
char a
, b
;
void f(int a_s, int a_e, int b_s, int b_e);
int main()
{
while(scanf(" %s %s", b, a) != EOF){
int len = strlen(a);
f(0, len - 1, 0, len - 1);
printf("\n");
}
return 0;
}
void f(int a_s, int a_e, int b_s, int b_e)
{
if(a_s == a_e){
printf("%c", a[a_s]);
return;
}
if(a_s > a_e || b_s > b_e)
return;
printf("%c", b[b_e]);
for(int i = a_s; i <= a_e; i ++){
if(a[i] == b[b_e]){
f(a_s, i - 1, b_s, b_s + (i - 1 - a_s));
f(i + 1, a_e, b_e - 1 - (a_e - (i + 1)), b_e - 1);
}
}
}
相关文章推荐
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- 通过中序和后续遍历数组重建二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树
- 重建二叉树(前序遍历和中序遍历)
- 已知前序遍历和中序遍历,重建二叉树
- 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
- 根据先序和中序序列重建二叉树
- 输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树。
- 根据前序遍历和中序遍历重建二叉树
- 数据结构二叉树之通过前序和中序恢复二叉树后续方法输出
- 重建二叉树(先序+中序 : 中序+后序)
- 027依据前序遍历和中序遍历,重建二叉树(keep it up)
- 《剑指offer》根据先序序列与中序序列重建二叉树-Java
- 递归和非递归俩种方法实现二叉树的前序、中序、后续遍历
- C++用非递归实现二叉树的前序排列,中序排列,后续排列
- 由前序遍历数组和中序遍历数组重建二叉树
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树
- 面试题6:重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)