剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode* root;
if (preorder.empty())
{
return nullptr;
}
else
{
root = new TreeNode;
root->val = preorder[0];
auto it = find(inorder.begin(), inorder.end(), preorder[0]);
int n = it - inorder.begin();//前序长度
vector<int>pre1;//当前根的左边的前序数组
pre1.assign(preorder.begin() + 1, preorder.begin() + n+1);
vector<int>in1;//当前根的左边的中序数组
in1.assign(inorder.begin(), it);
vector<int>pre2;//当前根的右边的前序数组
pre2.assign(preorder.begin() + n+1, preorder.end());
vector<int>in2;//当前根的右边的中序数组
in2.assign(it + 1, inorder.end());
root->left = buildTree(pre1, in1);
root->right = buildTree(pre2, in2);
}
return root;
}
};```