-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path표현 가능한 이진트리.py
More file actions
32 lines (31 loc) · 1.06 KB
/
표현 가능한 이진트리.py
File metadata and controls
32 lines (31 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import math
def DFS(binary, parent):
# print(binary, parent)
if len(binary) == 1:
if parent == 0 and int(binary) == 1:
# print("return 0 " )
return 0
else :
return 1
mid_index = math.floor(len(binary)/2)
root = int(binary[mid_index])
if parent == 0 and root == 1:
return 0
left_node = binary[:mid_index]
right_node = binary[mid_index+1:]
return min (DFS(left_node, root) ,DFS(right_node, root))
def solution(numbers):
answer = []
height = 0
for number in numbers :
binary_number = bin(number)[2:]
log2_binary_len = math.log2(len(binary_number)+1)
if log2_binary_len == int(log2_binary_len) :
height = log2_binary_len
else :
height = math.ceil(log2_binary_len)
binary_number = '0' * (2**height-1 - len(binary_number)) +binary_number
mid_index = math.floor(len(binary_number)/2)
# print(binary_number)
answer.append(DFS(binary_number, int(binary_number[mid_index])))
return answer