题解 | #重建二叉树#
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
#include <cstddef>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param preOrder int整型vector
* @param vinOrder int整型vector
* @return TreeNode类
*/
TreeNode* reConstructBinaryTree(vector<int>& preOrder, vector<int>& vinOrder) {
// 依次访问pre,根据元素在vin中的位置顺序依次构建二叉树
if (preOrder.empty()) {
return nullptr;
}
auto* root = new TreeNode(preOrder[0]);
for (size_t i = 1; i < preOrder.size(); i++) {
int num_inserted = preOrder[i];
auto* node_inserted = new TreeNode(num_inserted);
auto num_inserted_index = find(vinOrder.begin(),vinOrder.end(),num_inserted);
auto* temp_root = root;
bool left = true;//
while(true){
auto root_num_index = find(vinOrder.begin(),vinOrder.end(),temp_root->val);
left = num_inserted_index <root_num_index;//如果在小于就在左边,否则就在右边
if(left && temp_root->left==nullptr){
temp_root->left = node_inserted;
break;
}
if(left && temp_root->left !=nullptr){
temp_root = temp_root->left;
continue;
}
if(!left && temp_root->right==nullptr){
temp_root->right = node_inserted;
break;
}
if(!left && temp_root->right!=nullptr){
temp_root = temp_root->right;
}
}
}
return root;
}
};
