题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树,假设输入的前序遍历和中序遍历的结果中都不含有重复值。
前序遍历:{1,2,4,7,3,5,6,8}
中序遍历:{4,7,2,1,5,3,8,6}
主要思路:
1.前序遍历的第一个元素是根节点,将根初始化。
2.在中序遍历中找到根的位置,根的左边是左子树,右边是右子树。
3.然后左右递归。
BTNode* reConstructBT(int *pre,int startpre,int endpre,int * ino,int startino,int endino){
if(startpre>endpre||startino>endino) return NULL;
BTNode * root=(BTNode *)malloc(sizeof(BTNode));
root->data=pre[startpre];
for(int i=startino;i<=endino;i++){
if(ino[i]==pre[startpre]){
root->left=reConstructBT(pre,startpre+1,startpre+i-startino,ino,startino,i-1);
root->right=reConstructBT(pre,i-startino+startpre+1,endpre,ino,i+1,endino);
break;
}
}
return root;
}