1. 题目描述
2. 思路分析
3. 代码展示
class Solution {
public:
TreeNode* _build(vector<int>& preorder, int& idx, vector<int>& inorder, int L, int R) {
if(L > R)
return nullptr;
TreeNode* root = new TreeNode(preorder[idx]);
int i = L;
for(; i <= R; i++) {
if(inorder[i] == root->val)
break;
}
if(L < i) {
idx++;
root->left = _build(preorder, idx, inorder, L, i - 1);
}
else {
root->left = nullptr;
}
if(R > i) {
idx++;
root->right = _build(preorder, idx, inorder, i + 1, R);
}
else {
root->right = nullptr;
}
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int idx = 0;
int L = 0;
int R = inorder.size() - 1;
TreeNode* root = _build(preorder, idx, inorder, L, R);
return root;
}
};