2022.11.19
本关任务要求采用中序遍历序列和后序遍历序列构造二叉树。
给定一棵二叉树的中序遍历序列和后序遍历序列可以构造出这棵二叉树。例如后序序列是DEBFGCA,中序序列是DBEAFCG,那么这颗二叉树的结构如图1所示。

本关任务是实现ConstructTree.cpp里的BTNode* InPostToTree(char *post, char *in, int n)。
该函数的功能是由后序遍历序列和中序遍历序列构造二叉树
后序序列为post[0:n-1]
中序序列为in[0:n-1]
返回所构造的二叉树的根指针
提示1:这是一个递归函数,在主程序中调用:
InPostToTree(post,in,n),其中n是序列长度。
提示2:由于在DeleteTree()中是使用delete删除一个树结点,所以在InPostToTree()需要使用new来申请结点空间。


本关的测试过程如下:
输入格式:
输入后序序列
输入中序序列
输出格式:
输出前序序列
以下是平台对step8/Main.cpp的测试样例:
样例输入
DEBFGCA
DBEAFCG
样例输出
Pre Travel Result:ABDECFG
开始你的任务吧,祝你成功!
///
#include "binary_tree.h"
/
/**
InPostToTree(): 由后序遍历序列和中序遍历序列构造二叉树
后序序列为post[0:n-1]
中序序列为in[0:n-1]
返回所构造的二叉树的根指针
*/
BTNode* InPostToTree(char *post, char *in, int n)
{
/*请在BEGIN和END之间实现你的代码*/
/*****BEGIN*****/
BTNode *s;
char r,*p;
int k;
if (n<=0) return NULL;
r=*(post+n-1);
s=(BTNode *)malloc(sizeof(BTNode));
s->data=r;
for (p=in; p<in+n; p++)
if (*p==r)
break;
k=p-in;
s->lchild=InPostToTree(post,in,k);
s->rchild=InPostToTree(post+k,p+1,n-k-1);
return s;
/******END******/
}