重建二叉树__牛客网 (nowcoder.com)
TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> in) {
vector<int> inleft, preleft, inright, preright;
vector<int>::iterator it;
vector<int>::iterator i;
int root = pre[0];
TreeNode* node = new TreeNode(root);
if (pre.size() == 0 || in.size() == 0) {
return NULL;
}
for (it = in.begin(); it != in.end(); it++) {
if (root == *it) {
i = it;
}
}
int k = 0;
for (it = in.begin(); it != in.end(); it++) {
if (k == 0) {
inleft.push_back(*it);
} else if (k == 1) {
inright.push_back(*it);
} else {}
if (it == i) {
k = 1;
}
}
k = 0;
vector<int>::iterator ite;
for (it = pre.begin() + 1; it != pre.end(); it++) {
for (ite = inleft.begin(); ite != inleft.end(); ite++) {
if (*it == *ite) {
preleft.push_back(*it);
k = 1;
}
}
if (k == 0) {
preright.push_back(*it);
}
k = 0;
}
node->left = reConstructBinaryTree(preleft,inleft);
node->right = reConstructBinaryTree(preright,inright);
return node;
}
};