diff --git a/invert-binary-tree/crumbs22.cpp b/invert-binary-tree/crumbs22.cpp new file mode 100644 index 000000000..04b0c95ff --- /dev/null +++ b/invert-binary-tree/crumbs22.cpp @@ -0,0 +1,29 @@ +/** + * 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: + TreeNode* invertTree(TreeNode* root) { + // 종료 조건 + if (!root) + return (nullptr); + + // 노드 반전 (중위순회) + TreeNode* tmp = root->left; + root->left = root->right; + root->right = tmp; + + // 재귀적 호출 + invertTree(root->left); + invertTree(root->right); + return (root); + } + }; diff --git a/search-in-rotated-sorted-array/crumbs22.cpp b/search-in-rotated-sorted-array/crumbs22.cpp new file mode 100644 index 000000000..01a4ab0fd --- /dev/null +++ b/search-in-rotated-sorted-array/crumbs22.cpp @@ -0,0 +1,35 @@ +class Solution { +public: + int search(vector& nums, int target) { + int left = 0; + int right = nums.size() - 1; + while(left <= right) { + int mid = left + (right - left) / 2; + + if (nums[mid] == target) + return (mid); + + // 왼쪽 구간이 정렬된 상태일 때 + if (nums[left] <= nums[mid]) { + // 왼쪽 구간에 있으면 right를 좁히면서 target을 탐색 + if (nums[left] <= target && target < nums[mid]) { + right = mid - 1; + } + // 왼쪽 구간에 없다면 오른쪽 구간으로 이동 + else + left = mid + 1; + } + // 오른쪽 구간이 정렬된 상태 + else { + // 오른쪽 구간에 target이 있으면 left를 좁히면서 target 탐색 + if (nums[mid] < target && target <= nums[right]) { + left = mid + 1; + } + // 오른쪽 구간에 없다면 왼쪽 구간으로 이동 + else + right = mid - 1; + } + } + return (-1); + } +};