/**
* 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) {
int in_size=vin.size();
if(pre.size()!=vin.size()||pre.size()==0||vin.size()==0)
return NULL;
vector<int> pre_left, pre_right, in_left, in_right;
int val=pre[0];
TreeNode* node = new TreeNode(val);
int p = 0;
for(p; p < in_size; ++p){
if(vin[p] == val) //Find the root position in in
break;
}
for(int i=0;i<in_size;i++) {
if(i<p) {
in_left.push_back(vin[i]);
pre_left.push_back(pre[i+1]);
}
else if(i>p) {
in_right.push_back(vin[i]);
pre_right.push_back(pre[i]);
}
}
node->left=reConstructBinaryTree(pre_left,in_left);
node->right=reConstructBinaryTree(pre_right,in_right);
return node;
}
};