class Solution {
public:
struct TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> in) {
return rebulidBinaryTree(pre, in);
}
static TreeNode* rebulidBinaryTree(vector<int>pre, vector<int>in){
if (pre.size() == 0 || in.size() == 0){
return NULL;
}
//获取根节点
TreeNode* root = new TreeNode(pre[0]);
//查找根节点在中序遍历中的位置
int cur = -1;
for (int i = 0; i < in.size(); i++){
if (pre[0] == in[i]){
cur = i;
break;
}
}
if (cur == -1){
return NULL;
}
//构建左子树
vector<int> lin;
for (int i = 0; i < cur; i++){
lin.push_back(in[i]);
}
vector<int> lpre;
for (int i = 1; i < lin.size() + 1; i++){
lpre.push_back(pre[i]);
}
root->left = rebulidBinaryTree(lpre, lin);
//构建右子树
vector<int> rin;
for (int i = cur+1; i < in.size(); i++){
rin.push_back(in[i]);
}
vector<int> rpre;
for (int i = 1+lin.size(); i < pre.size() ; i++){
rpre.push_back(pre[i]);
}
root->right = rebulidBinaryTree(rpre, rin);
return root;
}
};
重建二叉树
最新推荐文章于 2020-01-18 17:32:58 发布