
[정답 코드]
class Node:
def __init__(self, data, left, right):
self.data = data
self.left = left
self.right = right
class Tree:
def __init__(self, root):
self.root = root
def find_node(self, node, data):
if node != None:
if node.data == data: return node
left_node = self.find_node(node.left, data)
if left_node: return left_node
right_node = self.find_node(node.right, data)
if right_node: return right_node
return None
def add_edge(self, data, left, right):
node = self.find_node(self.root, data)
if left != '.': node.left = Node(left, None, None)
if right != '.': node.right = Node(right, None, None)
def preorder(self, node):
if node != None:
print(node.data, end='')
self.preorder(node.left)
self.preorder(node.right)
def inorder(self, node):
if node != None:
self.inorder(node.left)
print(node.data, end='')
self.inorder(node.right)
def postorder(self, node):
if node != None:
self.postorder(node.left)
self.postorder(node.right)
print(node.data, end='')
n = int(input())
t = Tree(Node(None, None, None))
for i in range(n):
node, left, right = input().split()
if i == 0:
t.root.data = node
t.add_edge(node, left, right)
t.preorder(t.root)
print()
t.inorder(t.root)
print()
t.postorder(t.root)
[풀이]
자료구조 tree를 class로 구현하였다.
[적용 자료구조 및 알고리즘]
파이썬 딕셔너리로 트리를 상당히 간단하게 구현할 수 있다.
def preorder(N):
global graph
if N in graph:
print(N, end="")
preorder(graph[N][0])
preorder(graph[N][1])
def inorder(N):
global graph
if N in graph:
inorder(graph[N][0])
print(N, end="")
inorder(graph[N][1])
def postorder(N):
global graph
if N in graph:
postorder(graph[N][0])
postorder(graph[N][1])
print(N, end="")
N = int(input())
graph = {}
for _ in range(N):
p, c1, c2 = input().split()
graph[p] = [c1, c2]
preorder('A')
print()
inorder('A')
print()
postorder('A')
mandaringit님의 코드를 참조하였다.