[백준/파이썬] 1991번 트리 순회 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1991번 트리 순회
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
이진 트리 노드 정보가 주어질 때 전위/중위/후위 순회를 출력하는 문제입니다.
코드
import collections
n = int(input())
class Node:
def __init__(self, data, left = None, right = None):
self.data = data
self.left = left
self.right = right
tree = Node("A")
for _ in range(n):
datas = list(input().split())
stack = collections.deque([tree])
while True:
tmp = stack.pop()
if tmp.data == datas[0]:
break
if tmp.left is not None:
stack.append(tmp.left)
if tmp.right is not None:
stack.append(tmp.right)
if datas[1] != "." :
tmp.left = Node(datas[1])
if datas[2] != "." :
tmp.right = Node(datas[2])
def preorder(node):
print(node.data, end="")
if node.left is not None:
preorder(node.left)
if node.right is not None:
preorder(node.right)
def inorder(node):
if node.left is not None:
inorder(node.left)
print(node.data, end="")
if node.right is not None:
inorder(node.right)
def postorder(node):
if node.left is not None:
postorder(node.left)
if node.right is not None:
postorder(node.right)
print(node.data, end="")
preorder(tree)
print()
inorder(tree)
print()
postorder(tree)
설명
입력으로 트리를 구성한 뒤, 재귀 함수로 전위/중위/후위 순회를 각각 수행해 출력합니다.
댓글남기기