思路:首先我们要明白二叉树先序遍历和中序遍历的性质,在中序遍历中,如果一个点在他在左边,那么就是在他的左子树,如果在右边,就是在右子树,那我们可以用递归来解决划分左右子树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if(preorder.empty()||inorder.empty()) return NULL;
TreeNode *root=new TreeNode(preorder[0]);
auto it=find(inorder.begin(),inorder.end(),preorder[0]);
vector<int> ileft(inorder.begin(),it),iright(it+1,inorder.end());
vector<int> pleft(preorder.begin()+1,preorder.begin()+1+ileft.size());
vector<int> pright(preorder.begin()+1+ileft.size(),preorder.end());
root->left=buildTree(pleft,ileft);
root->right=buildTree(pright,iright);
return root;
}
};