Skip to content

Commit 2d64456

Browse files
authored
Merge pull request #1025 from mintheon/main
[mintheon] Week10
2 parents e57e52c + a267055 commit 2d64456

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

invert-binary-tree/mintheon.java

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import java.util.ArrayDeque;
2+
import java.util.Queue;
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* public class TreeNode {
7+
* int val;
8+
* TreeNode left;
9+
* TreeNode right;
10+
* TreeNode() {}
11+
* TreeNode(int val) { this.val = val; }
12+
* TreeNode(int val, TreeNode left, TreeNode right) {
13+
* this.val = val;
14+
* this.left = left;
15+
* this.right = right;
16+
* }
17+
* }
18+
*/
19+
//시간복잡도: O(n)
20+
//공간복잡도: O(n)
21+
class Solution {
22+
public TreeNode invertTree(TreeNode root) {
23+
if(root == null) {
24+
return root;
25+
}
26+
27+
Queue<TreeNode> queue = new ArrayDeque<>();
28+
queue.add(root);
29+
30+
while(!queue.isEmpty()) {
31+
TreeNode cur = queue.poll();
32+
33+
if(cur == null) {
34+
continue;
35+
}
36+
37+
TreeNode temp = cur.left;
38+
cur.left = cur.right;
39+
cur.right = temp;
40+
41+
if(cur.left != null) {
42+
queue.add(cur.left);
43+
}
44+
45+
if(cur.right != null) {
46+
queue.add(cur.right);
47+
}
48+
}
49+
50+
return root;
51+
}
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
// 시간 복잡도: O(log n)
3+
// 공간 복잡도: O(1);
4+
public int search(int[] nums, int target) {
5+
int left = 0;
6+
int right = nums.length - 1;
7+
8+
while(left <= right) {
9+
int mid = (left + right) / 2;
10+
11+
if(nums[mid] > nums[nums.length - 1]) {
12+
left = mid + 1;
13+
} else {
14+
right = mid - 1;
15+
}
16+
}
17+
18+
int answer = binarySearch(nums, 0, left - 1, target);
19+
20+
return answer != -1 ? answer : binarySearch(nums, left, nums.length - 1, target);
21+
}
22+
23+
private int binarySearch(int[] nums, int leftIndex, int rightIndex, int target) {
24+
int left = leftIndex;
25+
int right = rightIndex;
26+
27+
while(left <= right) {
28+
int mid = (left + right) / 2;
29+
30+
if(nums[mid] == target) {
31+
return mid;
32+
} else if (nums[mid] < target) {
33+
left = mid + 1;
34+
} else {
35+
right = mid - 1;
36+
}
37+
}
38+
39+
return -1;
40+
}
41+
}

0 commit comments

Comments
 (0)