二叉树重建,整体思想还是找到前序是:根左右,中序是左根右,然后递归调用即可。

 // Definition for binary tree
  struct TreeNode {
      int val;
      TreeNode *left;
      TreeNode *right;
      TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  };


class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
        if (pre.size() == 0) return NULL;
        if (pre.size() == 1) return new TreeNode(pre[0]);
        TreeNode* root = new TreeNode(pre[0]);
        pre.erase(pre.begin());
        int index = find(vin.begin(), vin.end(), root->val) - vin.begin();
        vin.erase(vin.begin() + index);
        vector<int> leftpre, leftvin;
        vector<int> rightpre, rightvin;
        if (index == 0)
        {
            root->left = NULL;

            rightpre.insert(rightpre.begin(),pre.begin() + index, pre.end());
            rightvin.insert(rightvin.begin(), vin.begin() + index, vin.end());
            root->right = reConstructBinaryTree(rightpre, rightvin);

        }
        else if (vin.size() - index  == 0)
        {
            leftpre.insert(leftpre.begin(), pre.begin(), pre.begin() + index);
            leftvin.insert(leftvin.begin(), vin.begin(), vin.begin() + index);
            root->left = reConstructBinaryTree(leftpre, leftvin);

            root->right = NULL;
        }
        else {
            //vector<int> leftpre,leftvin;
            leftpre.insert(leftpre.begin(), pre.begin(), pre.begin()+index);
            leftvin.insert(leftvin.begin(), vin.begin(), vin.begin()+index);
            root->left = reConstructBinaryTree(leftpre, leftvin);

            //vector<int> rightpre,rightvin;
            rightpre.insert(rightpre.begin(), pre.begin() + index, pre.end());
            rightvin.insert(rightvin.begin(), vin.begin() + index, vin.end());
            root->right = reConstructBinaryTree(rightpre, rightvin);
        }
        return root;


    }
};