/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param preOrder int整型vector
* @param vinOrder int整型vector
* @return TreeNode类
*/
TreeNode* fun(vector<int> preOrder, vector<int> vinOrder)
{
if(preOrder.empty())
{
return nullptr;
}
int root_val=preOrder[0];
TreeNode* root=new TreeNode(root_val);
auto index=vinOrder.begin();
for(auto i=vinOrder.begin();i<vinOrder.end();i++)
{
if(*i==root_val)
{
index=i;
}
}
vector<int> left_vin_Order(vinOrder.begin(),index);
vector<int> right_vin_Order(index+1,vinOrder.end());
vector<int> left_pre_Order(preOrder.begin()+1,preOrder.begin()+1+left_vin_Order.size());
vector<int> right_pre_Order(preOrder.end()-right_vin_Order.size(),preOrder.end());
root->left=fun(left_pre_Order,left_vin_Order);
root->right=fun(right_pre_Order,right_vin_Order);
return root;
}
TreeNode* reConstructBinaryTree(vector<int>& preOrder, vector<int>& vinOrder) {
// write code here
return fun(preOrder,vinOrder);
}
};