Skip to content

Commit 0e2b6ab

Browse files
authored
Merge pull request #1059 from AlgorithmWithGod/lkhyun
[20251007] PGM / Lv3 / 표현 가능한 이진 트리 / 이강현
2 parents 39b89f5 + a868f6e commit 0e2b6ab

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
```java
2+
class Solution {
3+
public int[] solution(long[] numbers) {
4+
int[] answer = new int[numbers.length];
5+
6+
for(int i = 0; i < numbers.length; i++){
7+
answer[i] = isPossible(numbers[i]) ? 1 : 0;
8+
}
9+
10+
return answer;
11+
}
12+
13+
public boolean isPossible(long number){
14+
String binary = Long.toBinaryString(number);
15+
16+
int height = 1;
17+
while ((1 << height) - 1 < binary.length()) {
18+
height++;
19+
}
20+
int treeSize = (1 << height) - 1;
21+
22+
StringBuilder sb = new StringBuilder();
23+
for(int i = 0; i < treeSize - binary.length(); i++){
24+
sb.append('0');
25+
}
26+
sb.append(binary);
27+
28+
return isValidTree(sb.toString(), 0, treeSize - 1);
29+
}
30+
31+
private boolean isValidTree(String tree, int start, int end){
32+
if(start > end) return true;
33+
34+
int mid = (start + end) / 2;
35+
char root = tree.charAt(mid);
36+
37+
if(root == '0'){
38+
for(int i = start; i <= end; i++){
39+
if(tree.charAt(i) == '1') return false;
40+
}
41+
}
42+
43+
return isValidTree(tree, start, mid - 1) &&
44+
isValidTree(tree, mid + 1, end);
45+
}
46+
}
47+
```

0 commit comments

Comments
 (0)