-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path카카오 2019 - 길 찾기 게임.py
62 lines (50 loc) · 1.63 KB
/
카카오 2019 - 길 찾기 게임.py
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""
2진트리 만들기
전위순회, 후위순회 실시
2진트리에서의 중위순회는 정렬과 같다.
"""
import sys
sys.setrecursionlimit(10000)
class node:
def __init__(self, x, num):
self.value = x
self.number = num
self.left = None
self.right = None
def solution(nodeinfo):
def preorder(node):
if not node: return
pre_result.append(node.number)
preorder(node.left)
preorder(node.right)
def postorder(node):
if not node: return
postorder(node.left)
postorder(node.right)
post_result.append(node.number)
for index, info in enumerate(nodeinfo):
info.append(index + 1)
nodeinfo.sort(key=lambda node: node[1], reverse=True)
root_node = node(nodeinfo[0][0], nodeinfo[0][2])
for x, y, num in nodeinfo[1:]:
cur_node, new_node = root_node, node(x, num)
while True:
if cur_node.value > new_node.value:
# 왼쪽 자식노드로 이동
if not cur_node.left:
cur_node.left = new_node
break
else:
cur_node = cur_node.left
else:
# 오른쪽 자식노드로 이동
if not cur_node.right:
cur_node.right = new_node
break
else:
cur_node = cur_node.right
pre_result, post_result = [], []
preorder(root_node)
postorder(root_node)
return [pre_result, post_result]
print(solution([[5, 3], [11, 5], [13, 3], [3, 5], [6, 1], [1, 3], [8, 6], [7, 2], [2, 2]]))