题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路
class Solution {
public:
TreeNode* func(vector<int>& pre,vector<int>& vin,int pre_s,int pre_e,int vin_s,int vin_e){
if(pre_s > pre_e || vin_s > vin_e) return NULL;
int i = vin_s,fid = pre[pre_s];
while(i<=vin_e && vin[i]!=fid) ++i;
TreeNode* root = new TreeNode(fid);
root->left = func(pre,vin,pre_s+1,pre_s+i-vin_s,vin_s,i-1);
root->right = func(pre,vin,pre_s+i-vin_s+1,pre_e,i+1,vin_e);
return root;
}
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
TreeNode *root = func(pre,vin,0,pre.size()-1,0,vin.size()-1);
return root;
}
};