알고리즘/🥈 실버
백준 1991 트리 순회 파이썬 풀이
차디러루너
2023. 4. 29. 22:32
728x90
난이도 : 실버1
풀이일 : 02271
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐
풀이 코드
def preorder(node): # 전위 순회 함수
if node:
print(alphabet[node-1], end= '')
preorder(left[node])
preorder(right[node])
def inorder(node): # 중위 순회 함수
if node:
inorder(left[node])
print(alphabet[node-1], end= '')
inorder(right[node])
def postorder(node): # 후위 순회 함수
if node:
postorder(left[node])
postorder(right[node])
print(alphabet[node-1], end= '')
# 입력받은 문자열을 인덱스로 활용하기 위해 알파벳 배열 생성
alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
n = int(input())
left = [0] * (n+1)
right = [0] * (n+1)
for i in range(1, n+1):
p, l, r = list(map(str, input().split()))
# 입력받은 노드를 인덱스로 활용
# 왼쪽 자식과 오른쪽 자식이 있으면 각각 저장
idx = alphabet.index(p)+1
try:
left[idx] = alphabet.index(l)+1
except:
pass
try:
right[idx] = alphabet.index(r)+1
except:
pass
preorder(1)
print()
inorder(1)
print()
postorder(1)
코드 구성
- 문자열을 인덱스로 활용하고자 알파벳 배열 생성
- 입력받은 노드를 인덱스로 활용하여 왼쪽, 오른쪽 자식 저장
- 전위순회, 중위순회, 후위순회 결과 각각 출력
- 출력 형식을 조건에 맞추기 위해 print문 end='' 추가
느낀점
트리 순회 함수를 연습해보기 좋았던 문제
오늘 알고리즘 문제풀이 실패로 옛날에 풀었던 문제 기록