重建二叉树
2014-11-02 17:29
232 查看
重建二叉树
描述题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。
输入输入有多组数据(少于100组),以文件结尾结束。 每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。输出每组输出数据单独占一行,输出对应得先序序列。样例输入
ACBFGED ABCDEFG CDAB CBAD
样例输出
DBACEGF BCAD
#include <iostream> #include <string.h> using namespace std; struct tree { char data; tree *left; tree *right; }; tree *converse(char *pos,char *in,int n,int m) { tree *b; int k=0; char *p,*q,*maxp; int maxpost,maxin; if(n<=0) { return NULL; } maxpost=-1; for(p=in;p<in+n;p++) for(q=pos;q<pos+m;q++) if(*p==*q) { k=q-pos; if(k>maxpost) { maxpost=k; maxp=p; maxin=p-in; } } b=new tree; b->data=pos[maxpost]; b->left=converse(pos,in,maxin,m); b->right=converse(pos,maxp+1,n-maxin-1,m); return b; } void pre(tree *b) { if(b) { cout<<b->data; pre(b->left); pre(b->right); } } int main() { char c1[1000],c2[1000]; while(cin>>c1>>c2) { tree *b; b=converse(c1,c2,strlen(c1),strlen(c2)); pre(b); cout<<endl; } return 0; }
相关文章推荐
- 剑指offer题解C++【4】重建二叉树
- [LeetCode] 根据前序序列和中序序列重建二叉树
- 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)
- 二叉树重建
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 二叉树重建查找叶子节点的最小值
- 牛客网剑指offer-重建二叉树
- 二叉树问题---根据后序数组重建搜索二叉树
- 剑指offer:重建二叉树
- 百练2255:重建二叉树题解
- 剑指offer_04_重建二叉树
- 重建二叉树(前序遍历和中序遍历)
- 笔试算法---二叉树重建
- 剑指offer-重建二叉树
- 剑指offer面试题6 重建二叉树(java实现)
- NYOJ_重建二叉树
- 由二叉树重建所引出的算法
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 重建二叉树
- 重建二叉树