题目描述
根据一棵树的前序遍历与中序遍历构造二叉树。
具体过程
- 根据前序序列第一个结点确定根结点
- 根据根结点在中序序列中的位置分割出左右两个子序列
- 对左子树和右子树分别递归使用同样的方法继续分解
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
if(pre.size() == 0 || pre.size() != in.size()){
return nullptr;
}
int value = pre[0];
TreeNode* root = new TreeNode(value);
if(pre.size() == 1){
return root;
}
//在中序遍历中找出根节点所在位置
auto pos = find(in.begin(), in.end(), value);
if(pos == in.end()){
return nullptr;
}
int leftSize = pos - in.begin();
int rightSize = in.end() - pos - 1;
root->left = reConstructBinaryTree(vector<int>(pre.begin() + 1, pre.begin() + 1 + leftSize),
vector<int>(in.begin(), in.begin() + leftSize));
root->right = reConstructBinaryTree(vector<int>(pre.begin() + 1 + leftSize, pre.end()),
vector<int>(in.begin() + leftSize + 1, in.end()));
return root;
}