1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자
www.acmicpc.net
# 전위 순회 (parent, 왼쪽, 오른쪽)
def pre_order(parent):
lc, rc = graph[parent]
global visited
visited += parent
if lc != ".":
pre_order(lc)
if rc != ".":
pre_order(rc)
# 중위 순회 (왼쪽, parent, 오른쪽)
def in_order(parent):
lc, rc = graph[parent]
if lc != ".":
in_order(lc)
global visited
visited += parent
if rc != ".":
in_order(rc)
# 후위 순회 (왼쪽, 오른쪽, parent)
def post_order(parent):
lc, rc = graph[parent]
if lc != ".":
post_order(lc)
if rc != ".":
post_order(rc)
global visited
visited += parent
N = int(input())
graph = {}
for _ in range(N):
p, lc, rc = input().split()
graph[p] = (lc, rc) # {'A': ('B','C'), 'B': ('D','.'), 'C': ('.','.') }
visited = ""
pre_order("A")
print(visited)
visited = ""
in_order("A")
print(visited)
visited = ""
post_order("A")
print(visited)
다른 풀이: 연결정보를 (노드 클래스)로 표현
class Node:
def __init__(self, p, lc, rc):
self.data = p
self.lc = lc
self.rc = rc
# 전위 순회 (parent, 왼쪽, 오른쪽)
def pre_order(parent):
node = graph[parent]
global visited
visited += node.data
if node.lc != ".":
pre_order(node.lc)
if node.rc != ".":
pre_order(node.rc)
# 중위 순회 (왼쪽, parent, 오른쪽)
def in_order(parent):
node = graph[parent]
if node.lc != ".":
in_order(node.lc)
global visited
visited += node.data
if node.rc != ".":
in_order(node.rc)
# 후위 순회 (왼쪽, 오른쪽, parent)
def post_order(parent):
node = graph[parent]
if node.lc != ".":
post_order(node.lc)
if node.rc != ".":
post_order(node.rc)
global visited
visited += node.data
N = int(input())
graph = {}
for _ in range(N):
p, lc, rc = input().split()
# {'A': Node('A','B','C'), 'B': Node('B','D','.'), 'C': Node('C','.','.') }
graph[p] = Node(p, lc, rc)
visited = ""
pre_order("A")
print(visited)
visited = ""
in_order("A")
print(visited)
visited = ""
post_order("A")
print(visited)
'BOJ 알고리즘 (패캠) > 정렬, 탐색' 카테고리의 다른 글
1927번: 최소 힙 (힙) - Fastcampus (0) | 2020.10.07 |
---|---|
2250번: 트리의 높이와 너비 (트리, 재귀) - Fastcampus (0) | 2020.10.07 |
1939번: 중량제한 (탐색, 이분탐색, BFS) - Fastcampus (0) | 2020.10.07 |
2110번: 공유기 설치 (탐색, 이분탐색) - Fastcampus (0) | 2020.10.07 |
1236번: 성 지키기 (탐색) - Fastcampus (0) | 2020.10.06 |