题解 | #重建二叉树#
重建二叉树
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 <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param preOrder int整型vector * @param vinOrder int整型vector * @return TreeNode类 */ TreeNode* reConstructBinaryTreeFun(vector<int>& preOrder, vector<int>& vinOrder, int preBegin, int preEnd, int vinBegin, int vinEnd) { if (preOrder.empty() || vinOrder.empty()) return nullptr; auto root = new TreeNode(preOrder[preBegin]); if (preBegin == preEnd) return root; int index = vinBegin; while (index != vinEnd + 1 && vinOrder[index] != preOrder[preBegin]) { index++; } if (index == vinBegin) { root->right = reConstructBinaryTreeFun(preOrder, vinOrder, preBegin + 1, preEnd, vinBegin + 1, vinEnd); return root; } if (index == vinEnd) { root->left = reConstructBinaryTreeFun(preOrder, vinOrder, preBegin + 1, preEnd, vinBegin, vinEnd - 1); return root; } root->left = reConstructBinaryTreeFun(preOrder, vinOrder, preBegin + 1, preBegin + index - vinBegin, vinBegin, index - 1); root->right = reConstructBinaryTreeFun(preOrder, vinOrder, preBegin + index - vinBegin + 1, preEnd, index + 1, vinEnd); return root; } TreeNode* reConstructBinaryTree(vector<int>& preOrder, vector<int>& vinOrder) { // write code here if (preOrder.empty() || vinOrder.empty()) return nullptr; return reConstructBinaryTreeFun(preOrder, vinOrder, 0, preOrder.size() - 1, 0, vinOrder.size() - 1); } };