题解 | #重建二叉树#
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
int size_vin = vin.size();
int size_pre = pre.size();
TreeNode* root = new TreeNode(0);
if (size_vin == 0 || size_pre == 0) {
return NULL;
} else if (size_vin == 1 && size_pre == 1) {
root->val = vin[0];
return root;
}
for (int i = 0; i < size_vin; i++) {
if (pre[0] == vin[i]) {
cout << i << endl;
vector<int> test(pre.begin(), pre.end());
for (auto i = test.begin(); i < test.end(); i++) {
cout << *i << endl;
}
vector<int> pre_left(pre.begin() + 1, pre.begin() + i + 1);
for (auto i = pre_left.begin(); i < pre_left.end(); i++) {
cout << *i << endl;
}
cout << "___________________" << endl;
vector<int> pre_right(pre.begin() + i + 1, pre.end());
for (auto i = pre_right.begin(); i < pre_right.end(); i++) {
cout << *i << endl;
}
cout << "___________________" << endl;
vector<int> vin_left(vin.begin(), vin.begin() + i);
for (auto i = vin_left.begin(); i < vin_left.end(); i++) {
cout << *i << endl;
}
cout << "___________________" << endl;
vector<int> vin_right(vin.begin() + i + 1, vin.end());
for (auto i = vin_right.begin(); i < vin_right.end(); i++) {
cout << *i << endl;
}
cout << vin[i] << endl;
root->val = vin[i];
cout << i << endl;
root->left = reConstructBinaryTree(pre_left, vin_left);
root->right = reConstructBinaryTree(pre_right, vin_right);
}
}
return root;
}
};
