/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param preorder int整型vector
* @param inorder int整型vector
* @return TreeNode类
*/
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.size() == 0) return nullptr;
int rootvalue = preorder[0];
TreeNode* root = new TreeNode(rootvalue);
int temp;
for (temp = 0; temp < inorder.size(); temp++) {
if (inorder[temp] == rootvalue)
break;
}
vector<int> leftinorder(inorder.begin(), inorder.begin() + temp);
vector<int> rightinorder(inorder.begin() + temp + 1, inorder.end());
vector<int> leftpreorder(preorder.begin() + 1,preorder.begin() + 1 + leftinorder.size());
vector<int> rightpreorder(preorder.begin() + 1 + leftinorder.size(),preorder.end());
root->left = buildTree(leftpreorder, leftinorder);
root->right = buildTree(rightpreorder, rightinorder);
return root;
}
};