题解 | #重建二叉树#
重建二叉树
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; } };