📌문제
🎖️난이도
✔️풀이
# sol1) dict & 재귀
n = int(input())
tree = {}
for _ in range(n):
item, left, right = input().split()
tree[item] = (left, right)
def preorder(item):
print(item, end="")
if tree[item][0] != ".":
preorder(tree[item][0])
if tree[item][1] != ".":
preorder(tree[item][1])
def inorder(item):
if tree[item][0] != ".":
inorder(tree[item][0])
print(item, end="")
if tree[item][1] != ".":
inorder(tree[item][1])
def postorder(item):
if tree[item][0] != ".":
postorder(tree[item][0])
if tree[item][1] != ".":
postorder(tree[item][1])
print(item, end="")
preorder('A')
print()
inorder('A')
print()
postorder('A')
# sol2) class & 재귀
n = int(input())
inputs = []
for _ in range(n):
inputs.append(input().split())
class Node():
def __init__(self, item, left, right):
self.item = item
self.left = left
self.right = right
def preorder(node):
print(node.item, end = "")
if node.left != ".":
preorder(tree[node.left])
if node.right != ".":
preorder(tree[node.right])
def inorder(node):
if node.left != ".":
inorder(tree[node.left])
print(node.item, end = "")
if node.right != ".":
inorder(tree[node.right])
def postorder(node):
if node.left != ".":
postorder(tree[node.left])
if node.right != ".":
postorder(tree[node.right])
print(node.item, end = "")
tree = {}
for item, left, right in inputs:
tree[item] = Node(item, left, right)
preorder(tree['A'])
print()
inorder(tree['A'])
print()
postorder(tree['A'])
🧠노트
트리 순회는 재귀로 구현하면 되고
전위, 중위, 후위 순회에 따라 각각 출력(print) 순서만 바꿔주면 된다.
나머지 코드는 전부 동일!
이때, if문으로 자식노드 없을 때(".")만 걸러주면 된다.
🔍참고
-