题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
题解
要想通过先序和中序求二叉树,设当前先序序列区间为[preL,preR].中序序列区间为[inL,inR];
TreeNode* create(vector<int>& pre, vector<int>& in,int preL,int preR,int inL,int inR){
if(preL>preR)
return NULL;
TreeNode* root=(TreeNode*)malloc(sizeof(TreeNode));
root->val=pre[preL];#根节点的值等于先序序列第一个值;
int k;#k为根节点在中序序列中的位置
for(k=inL;k<=inR;k++){
if(in[k]==pre[preL])
break;
}
int numleft=k-inL;#numleft为左子树的节点个数
root->left=create(pre,in,preL+1,preL+numleft,inL,k-1);
root->right=create(pre,in,preL+numleft+1,preR,k+1,inR);
return root;
}
题目源地址[leetcode-cn.com/problems/zh…]