重建二叉树
2014-05-17 23:38
260 查看
题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行为一个整数n(1<=n<=1000):代表二叉树的节点个数。
输入的第二行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的前序遍历序列。
输入的第三行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的中序遍历序列。
输出:
对应每个测试案例,输出一行:
如果题目中所给的前序和中序遍历序列能构成一棵二叉树,则输出n个整数,代表二叉树的后序遍历序列,每个元素后面都有空格。
如果题目中所给的前序和中序遍历序列不能构成一棵二叉树,则输出”No”。
样例输入:
样例输出:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行为一个整数n(1<=n<=1000):代表二叉树的节点个数。
输入的第二行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的前序遍历序列。
输入的第三行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的中序遍历序列。
输出:
对应每个测试案例,输出一行:
如果题目中所给的前序和中序遍历序列能构成一棵二叉树,则输出n个整数,代表二叉树的后序遍历序列,每个元素后面都有空格。
如果题目中所给的前序和中序遍历序列不能构成一棵二叉树,则输出”No”。
样例输入:
8 1 2 4 7 3 5 6 8 4 7 2 1 5 3 8 6 8 1 2 4 7 3 5 6 8 4 1 2 7 5 3 8 6
样例输出:
7 4 2 5 8 6 3 1 No
#include<stdio.h> #include<stdlib.h> #define MAXNUM 1000 int pre[MAXNUM],mid[MAXNUM],post[MAXNUM]; int flag; int num,post_k=0; int getIndex(int key,int s,int e) { int i=0; for(i=s; i<e; i++) if(mid[i]==key) return i; return -1; } void createTree(int pre_i, int mid_j, int len) { int mid; if(len<=0) { flag = 1; return ; } mid = getIndex(pre[pre_i],mid_j,mid_j+len); if(mid== -1) { flag = -1; return; } if(flag ==1)createTree(pre_i+1,mid_j,mid - mid_j); if(flag==1)createTree(pre_i+(mid - mid_j+1),mid+1,len-1-(mid-mid_j)); post[post_k] = pre[pre_i] ; post_k++; } void main() { int i,j; while (scanf("%d",&num) != EOF) { for(i=0; i<num; i++) scanf("%d",&pre[i]); for(j=0; j<num; j++) scanf("%d",&mid[j]); flag =1; post_k = 0; createTree(0,0,num); if(flag == 1) { for (i=0; i<num;i++) { printf("%d ",post[i]); } printf("\n"); } else { printf("%s\n","No"); } } } /************************************************************** Problem: 1385 User: xuebintian Language: C Result: Accepted Time:0 ms Memory:924 kb ****************************************************************/
相关文章推荐
- UVA 536 - Tree Recovery(二叉树重建)
- 重建二叉树
- 根据前序和中序序列重建二叉树 Construct Binary Tree from Preorder and Inorder Traversal
- 剑指offer(C++)——重建二叉树
- 习题课第一次作业:2、重建二叉树
- 根据二叉树的前序遍历和中序遍历的结果重建出该二叉树
- 输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树。
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 面试题6:重建二叉树
- 重建二叉树
- 《编程之美》3.9重建二叉树
- 06_重建二叉树
- 【剑指offer】重建二叉树
- 算法题17 重建二叉树
- 重建二叉树
- 重建二叉树
- 剑指offer面试题6:重建二叉树