class Solution {
public:
unordered_map<int, int> hash;
TreeNode* helper(vector<int>& preorder, int& preIndex, vector<int> inorder, int left, int right){
if(preIndex >= preorder.size()) return nullptr;
if(left > right) return nullptr;
int rootVal = preorder[preIndex];
TreeNode* root = new TreeNode(rootVal);
int inIndex = hash[rootVal];
preIndex++;
root->left = helper(preorder, preIndex, inorder, left, inIndex - 1);
root->right = helper(preorder, preIndex, inorder, inIndex + 1, right);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
for(int i = 0; i < inorder.size(); i++){
hash[inorder[i]] = i;
}
int preIndex = 0;
return helper(preorder, preIndex, inorder, 0, inorder.size() - 1);
}
};
LeetCode Hot100 105.从前序与中序遍历序列构造二叉树
最新推荐文章于 2024-09-28 10:34:40 发布