/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; {1,2,4,7,3,5,6,8} {4,7,2,1,5,3,8,6} */ #include <vector> class Solution { public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { int m = pre.size(); int n = vin.size(); if(m == 0 || n == 0){ return NULL; } TreeNode* root = new TreeNode(pre[0]); for(int i=0;i<pre.size();i++){ if(pre[0] == vin[i]){ //左子树前序遍历 vector<int >leftpre(pre.begin()+1, pre.begin()+i+1);//end指向最后一个元素后一位置 //左子树中序遍历 vector<int >leftvin(vin.begin(), vin.begin()+i); root->left = reConstructBinaryTree(leftpre, leftvin); //右子树前序遍历 vector<int >rightpre(pre.begin()+i+1, pre.end()); //右子树中序遍历 vector<int >rightvin(vin.begin()+i+1, vin.end()); root->right = reConstructBinaryTree(rightpre, rightvin); break; } } return root; } };