BOJ 1991 트리 순회

LONGNEW·2021년 1월 17일
0

BOJ

목록 보기
63/333

https://www.acmicpc.net/problem/1991
시간 2초, 메모리 128MB
input :

  • N(1≤N≤26)
  • N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드
  • 항상 A가 루트 노드가 된다. 자식 노드가 없는 경우에는 .으로 표현

output :

  • 첫째 줄 전위 순회
  • 둘째 줄 중위 순회
  • 셋째 줄 후위 순회 결과를 출력한다.
  • 각 줄에 N개의 알파벳을 공백 없이 출력

인접리스트에 인덱스 0, 1 번에다가
left_child, right_child 로 저장하자 ㅋㅋㅋㅋㅋㅋㅋ 메모리는 노드가 많아지면 많이 잡아먹을 듯.

괜히 for문 돌리려고 했다가 시간만 많이 쓰고 if문으로 하자..

import sys

n = int(sys.stdin.readline())
graph = [[-1, -1] for i in range(n)]

def print_node(start):
    print(chr(start + 65), end="")
    if graph[start][0] != -1:
        print_node(graph[start][0])
    if graph[start][1] != -1:
        print_node(graph[start][1])

def print_middle_dfs(start):
    if graph[start][0] != -1:
        print_middle_dfs(graph[start][0])
    print(chr(start + 65), end="")
    if graph[start][1] != -1:
        print_middle_dfs(graph[start][1])

def print_after_dfs(start):
    if graph[start][0] != -1:
        print_after_dfs(graph[start][0])
    if graph[start][1] != -1:
        print_after_dfs(graph[start][1])
    print(chr(start + 65), end="")

for i in range(n):
    a, b, c = sys.stdin.readline().split()
    idx = ord(a) - 65
    if b != '.':
        graph[idx][0] = ord(b) - 65
    if c != '.':
        graph[idx][1] = ord(c) - 65

print_node(0)
print()
print_middle_dfs(0)
print()
print_after_dfs(0)

0개의 댓글