1.二叉树的建立
//a序列用存储先序序列,b序列用来存储中序序列
string a,b;
//结构体用来存储二叉树 ,二叉树里面每一个节点应该有的东西:
//1. 当前节点的值
//2. 左子树的位置
//3. 右子树的位置
struct node{
char value;
int l,r;
}data[101];
//root代表根节点的位置,cnt记录节点编号
int root,cnt=0;
//二叉树建树函数:
//prel->代表先序序列中的左边界
//prer->代表先序序列中的右边界
//inl->代表中序序列中的左边界
//inr->代表中序序列中的右边界
//bt代表当前节点编号
int create(int prel,int prer,int inl,int inr,int bt){
//递归建树的边界->条件是,先序序列当中的左边界大于了右边界
if(prel>prer)bt=0;
//如果没有到达边界,递归建树
else{
//1.更新节点值
bt=++cnt;
//在中序序列当中找到根节点
//?怎么找 ->先要根据先序序列找到根节点,再去中序中遍历查找此根节点 并且做标记,
int i=0;
for(i=inl;i<=inr;i++){
if(a[prel]==b[i]){
//找到了,退出遍历
break;
}
}
//根据找到的根节点计算出左子树的数目
int numleft=i-inl;
//存储根节点的值
data[bt].value=b[i];
//递归建立左子树
data[bt].l=create(prel+1,prel+numleft,inl,i-1,bt);
//递归建立右子树
data[bt].r=creat