import sys
N = int(sys.stdin.readline().strip())
graph = {}
stack = []
for _ in range(N):
node_info = list(sys.stdin.readline().strip().split(" "))
root = node_info[0]
left = node_info[1] if node_info[1] != '.' else 0
right = node_info[2] if node_info[2] != '.' else 0
graph[root] = [left, right]
def preorder(graph, start):
stack.append(start)
left = graph[start][0]
right = graph[start][1]
if left != 0:
preorder(graph, left)
if right != 0:
preorder(graph, right)
def inorder(graph, start):
left = graph[start][0]
right = graph[start][1]
if left != 0:
inorder(graph, left)
stack.append(start)
else:
stack.append(start)
if right != 0:
inorder(graph, right)
def postorder(graph, start):
left = graph[start][0]
right = graph[start][1]
if left != 0:
postorder(graph, left)
if right != 0:
postorder(graph, right)
stack.append(start)
preorder(graph, 'A')
for i in range(len(stack)):
print(stack[i], end='')
print()
stack =[]
inorder(graph, 'A')
for i in range(len(stack)):
print(stack[i], end='')
print()
stack =[]
postorder(graph, 'A')
for i in range(len(stack)):
print(stack[i], end='')
경우의 수 따져가며, if문 순서 배치에 애먹었던 문제. 쉽다곤 하는데, 나는 좀 애먹었다.
좋은 솔루션을 찾아서 공유하고자 함.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(int(1e9))
N = int(input())
tr = {} ##dict로 트리 설정
for _ in range(N):
root,left,right = input().rstrip().split()
tr[root] = [left,right]
def preorder(root):
if root !='.':
print(root, end='')
preorder(tr[root][0])
preorder(tr[root][1])
def inorder(root):
if root !='.':
inorder(tr[root][0])
print(root,end='')
inorder(tr[root][1])
def postorder(root):
if root !='.':
postorder(tr[root][0])
postorder(tr[root][1])
print(root, end='')
preorder('A')
print()
inorder('A')
print()
postorder('A')
ㅏ..ㅋㅋㅋ...
내 알고리즘도 위의 솔루션과 로직은 같지만, 제 3자가 읽었을 때 해석하기 힘들다는 점에서 '좋은 코드'는 아니다.