백준 1991 트리 순회

Hyunta·2022년 11월 21일
0
post-custom-banner

https://www.acmicpc.net/problem/1991

접근 방법:

  1. 트리 구조를 어떻게 그려야할지 어떤 자료구조를 채택해야할 지 고민했다.
  2. Node를 클래스로 만들어서 left, right 값을 가지고 있도록 구현하면 괜찮지 않을까 생각했다.
  3. 전위 순회, 중위 순회, 후위 순회를 각각 메서드로 분리해서 실행시키면 순서도 유지될 것이라고 생각했다.

구현:

class Node():
    def __init__(self, item, left, right):
        self.item = item
        self.left = left
        self.right = right

먼저 노드를 클래스로 만들었습니다. 값을 String으로 갖고 있고 해당 객체는 tree라는 dictionary에서 호출할 수 있도록 구현했습니다.

import sys


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="")


input = sys.stdin.readline
n = int(input())
tree = {}
for _ in range(n):
    item, left, right = input().split()
    tree[item] = Node(item, left, right)

preorder(tree["A"])
print()
inorder(tree["A"])
print()
postorder(tree["A"])
profile
세상을 아름답게!
post-custom-banner

0개의 댓글