diff --git a/Leetcode/105/ysuh/solution.cpp b/Leetcode/105/ysuh/solution.cpp new file mode 100644 index 0000000..4faa8a3 --- /dev/null +++ b/Leetcode/105/ysuh/solution.cpp @@ -0,0 +1,35 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + map val_idx_map; + int idx = 0; + TreeNode* find(vector& preorder, vector& inorder, int left, int right) { + if (left > right) { + return nullptr; + } + int i_idx = val_idx_map[preorder[idx]]; + TreeNode* parent = new TreeNode(preorder[idx]); + idx++; + parent->left = find(preorder, inorder, left, i_idx-1); + parent->right = find(preorder, inorder, i_idx+1, right); + return parent; + } + TreeNode* buildTree(vector& preorder, vector& inorder) { + int idx = 0; + for (auto ele : inorder) { + val_idx_map[ele] = idx; + idx++; + } + return find(preorder, inorder, 0, inorder.size()-1); + } +};