풀이방법 1 : 직접 구현
1import sys
2
3sys.setrecursionlimit(10**6)
4class Node:
5 def __init__(self, value):
6 self.value = value
7 self.left = None
8 self.right = None
9
10class BinaryTree:
11 def __init__(self, root):
12 self.root = root
13
14 def insert(self, value):
15 cur_node = self.root
16 while True:
17 if value < cur_node.value:
18 if cur_node.left != None:
19 cur_node = cur_node.left
20 else:
21 cur_node.left = Node(value)
22 break
23 else:
24 if cur_node.right != None:
25 cur_node = cur_node.right
26 else:
27 cur_node.right = Node(value)
28 break
29
30 def traverse(self, node):
31 if node.left != None:
32 self.traverse(node.left)
33 if node.right != None:
34 self.traverse(node.right)
35 print (node.value)
36try:
37 tree = BinaryTree(Node(int(input())))
38except:
39 exit()
40
41while True:
42 try:
43 tree.insert(int(input()))
44 except:
45 break
46
47tree.traverse(tree.root)
풀이방법 2
1import sys
2sys.setrecursionlimit(10**6)
3
4L = []
5while True:
6 try:
7 L.append(int(input()))
8 except:
9 break
10
11def traverse(root, end):
12 if root > end:
13 return
14 mid = end + 1
15
16 for i in range(root+1, end+1):
17 if L[root] < L[i]:
18 mid = i
19 break
20
21 traverse(root+1, mid-1)
22 traverse(mid, end)
23 print (L[root])
24
25traverse(0, len(L)-1)
- 트리를 구현하지 않고 푸는 풀이는 인터넷을 참고하였다
- 전위 순회한 결과를 리스트에 저장한 후, root 기준으로 나눠지는 mid를 찾아
- root기준 왼쪽, root기준 오른쪽을 각각 재귀적으로 순회하는 방법이다.