题目描述
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
map<int,int> index;
TreeNode* helper(vector<int>& preorder,int p_start,int p_end,vector<int>& inorder,int i_start,int i_end){
//判断是否为空
if(p_end < p_start)
return NULL;
//建立根节点
TreeNode* root = new TreeNode(preorder[p_start]);
//中序遍历中根节点的位置
int inorder_root = index[preorder[p_start]];
//左子树中节点的个数
int left_num = inorder_root - i_start;
root->left = helper(preorder,p_start+1,p_start+left_num,inorder,i_start,inorder_root-1);
root->right = helper(preorder,p_start+left_num+1,p_end,inorder,inorder_root+1,i_end);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int len = inorder.size();
//之后不用遍历中序遍历数组
for(int i = 0;i<len;i++){
index[inorder[i]] = i;
}
TreeNode* root = helper(preorder,0,len-1,inorder,0,len-1);
return root;
}
};