题目描述:
给出二叉树的前序遍历序列和中序遍历序列分别是:DBACEGF和ABCDEFG,需要编写程序通过这两组数据求出该树的后
序遍历序列。
key格式为:CTF{}
直接画出这颗二叉树 D
/ \
B E
/ \ \
A C G
/
F
所以后序遍历顺序:ACBFGED,提交CTF{ACBFGED},通过!
但是作为编程题,不能就这么算了,我们写个代码:
#include<iostream>
#include<fstream>
#include<string>
struct TreeNode{
struct TreeNode* left;
struct TreeNode* right;
char elem;
};
TreeNode* BinaryTreeFromOrderings(char* inorder,char* preorder,int length){
if(length==0){
return NULL;
}
TreeNode* node=new TreeNode;//Noice that [new] should be written out.
node->elem=*preorder;
int rootIndex=0;
for(;rootIndex<length;rootIndex++){//a variation of the loop
if(inorder[rootIndex]==*preorder) break;
}
node->left=BinaryTreeFromOrderings(inorder,preorder+1,rootIndex);
node->right=BinaryTreeFromOrderings(inorder+rootIndex+1,preorder+rootIndex+1,length-(rootIndex+1));
std::cout<<node->elem<<std::endl;
return node;
}
int main(int argc,char** argv){
char* pr="DBACEGF";
char* in="ABCDEFG";
BinaryTreeFromOrderings(in,pr,8);
printf("\n");
return 0;
}