백준 알고리즘
[백준/Python] 1991_트리 순회
헝그리개발자
2021. 6. 29. 15:23
문제
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자
www.acmicpc.net
풀이
입력받은 간선들을 딕셔너리 타입의 edges 변수에 저장합니다.
재귀함수를 이용해서 전위순회, 중위순회, 후위순회 함수를 선언합니다.
전위 순회일 때, current 노드 출력 -> left_child 노드를 매개변수로 전위 순회 -> right_child 노드를 매개변수로 전위 순회
중위 순회일 때, left_child 노드를 매개변수로 중위 순회 -> current 노드 출력 -> right_child 노드를 매개변수로 중위 순회
후위 순회일 때, left_child 노드를 매개변수로 후위 순회 -> right_child 노드를 매개변수로 후위 순회 -> current 노드 출력
코드
import sys
def preorder(node):
if node != '.':
print(node, end='')
preorder(edges[node][0])
preorder(edges[node][1])
def inorder(node):
if node != '.':
inorder(edges[node][0])
print(node, end='')
inorder(edges[node][1])
def postorder(node):
if node != '.':
postorder(edges[node][0])
postorder(edges[node][1])
print(node, end='')
n = int(sys.stdin.readline().rstrip())
edges = dict()
for i in range(n):
parent, left_child, right_child = sys.stdin.readline().rstrip().split()
edges[parent] = [left_child, right_child]
preorder('A')
print()
inorder('A')
print()
postorder('A')