通过先序加中序很显然是可以唯一建立一棵二叉树的,过程呢就是在先序数组中定位根节点,再到中序数组中找到这个元素,
那么在这个元素之前的就是左子树节点,在这个元素右边的就是右子树节点,实际上就是地递归的对区间进行划分
/*通过先序加中序很显然是可以唯一建立一棵二叉树的,过程呢就是在先序数组中定位根节点,再到中序数组中找到这个元素,
那么在这个元素之前的就是左子树节点,在这个元素右边的就是右子树节点,实际上就是地递归的对区间进行划分
*/
BiTree PreInCreate(int A[], int B[], int la, int ra, int lb, int rb){
//默认最开始传入的la = lb = 0; ra = rb = n-1;
root = (BiTNode*)malloc(sizeof(BiTNode));//申请一个节点
p->data = A[la];
for(int i = lb;B[i]!=p->data;i++);
int llen = i - lb;//左子树长度
int rlen = rb - i;
if(llen){//递归建立左子树
root>lchild = PreInCreate(A,B,la+1,la+llen,lb,lb+llen-1);
}
else{
root->lchild = NULL;
}
if(rlrn){
root->rchild = PreInCreate(A,B,ra-rlen+1,ra,rb-rlrn+1,rb);
}
else{
root->rchild = NULL;
}
return root;
}