了解书结构的基础题,此题的关键是在于找到根的位置。在前序遍历(根左右)中,根永远是第一个,通过确定了根,我们可以通过在后序遍历中找到根的位置来判断出左子树和右子树。通过递归解决问题
/**
* 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.size()==0) return NULL;
int curRootVal=preorder[0],indexRoot=0;
for (int i=0;i<inorder.size();i++)
if (inorder[i]==curRootVal) indexRoot=i;
TreeNode* curRoot=new TreeNode(curRootVal);
vector<int> leftPreorder; leftPreorder.assign(preorder.begin()+1,preorder.begin()+1+indexRoot);
vector<int> leftInorder; leftInorder.assign(inorder.begin(),inorder.begin()+indexRoot);
curRoot->left=buildTree(leftPreorder,leftInorder);
vector<int> rightPreorder; rightPreorder.assign(preorder.begin()+1+indexRoot,preorder.end());
vector<int> rightInorder; rightInorder.assign(inorder.begin()+indexRoot+1,inorder.end());
curRoot->right=buildTree(rightPreorder, rightInorder);
return curRoot;
}
};