题意
题解
方法一:递归
class Solution {
public:
map<int, int> indexMap;
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
for (int i = 0; i < inorder.size(); i++)
indexMap[inorder[i]] = i;
return buildTree(preorder, inorder, 0, preorder.size() - 1, 0, preorder.size() - 1);
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder, int preStart, int preEnd, int inStart, int inEnd) {
if (preStart > preEnd) return nullptr;
int midValue = preorder[preStart];
int index = indexMap[midValue];
TreeNode* node = new TreeNode(midValue);
int leftTreeCount = index - inStart;
node->left = buildTree(preorder, inorder, preStart + 1, preStart + leftTreeCount, inStart, index - 1);
node->right = buildTree(preorder, inorder, preStart + leftTreeCount + 1, preEnd, index + 1, inEnd);
return node;
}
};