c++
class Solution {
public:
int findnum(vector<int> &inorder, int num) {
for (int i = 0; i < inorder.size(); i++) {
if (inorder[i] == num) return i;
}
return 0;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.size() == 0) return nullptr;
int pos = findnum(inorder, preorder[0]);
vector<int> preorderl, inorderl;
vector<int> preorderr, inorderr;
for (int i = 0; i < pos; i++) {
preorderl.push_back(preorder[i + 1]);
inorderl.push_back(inorder[i]);
}
for (int i = pos + 1; i < preorder.size(); i++) {
preorderr.push_back(preorder[i]);
inorderr.push_back(inorder[i]);
}
TreeNode *node = new TreeNode(preorder[0], buildTree(preorderl, inorderl), buildTree(preorderr, inorderr));
return node;
}
};
js
var buildTree = function(preorder, inorder) {
if (!preorder.length) return null;
var pos = inorder.indexOf(preorder[0]);
var node = new TreeNode(preorder[0]);
node.left = buildTree(preorder.slice(1, pos + 1), inorder.slice(0, pos));
node.right = buildTree(preorder.slice(pos + 1), inorder.slice(pos + 1));
return node;
};