알고리즘 풀이/백준

[ 백준 1991 ] 트리 순회 - Python

12.tka 2020. 5. 29. 22:54
728x90

문제 보기

이 문제는 트리 문제이다.

트리를 구성하기 위해서 class를 사용하였다.

 

전위 순회, 중위 순회, 후위 순회 함수는 전체적인 구성은 똑같고 출력 위치만 바꿔주면 된다.

 

전위 순회의 알고리즘 순서는 아래와 같다.

1. 현재 노드 값을 출력한다.

2. 현재 노드의 왼쪽 자식의 값이 .이 아니라면 왼쪽 자식으로 이동하고 다시 1번을 진행한다.

3. 현재 노드의 오른쪽 자식의 값이 .이 아니라면 오른쪽 자식으로 이동하고 다시 1번을 진행한다.

 


코드

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


if __name__ == "__main__":

    N = int(input())
    tree = {}

    for _ in range(N):
        node, left, right = map(str, input().split())
        tree[node] = Node(item=node, left=left, right=right)

    preorder(tree['A'])
    print()
    inorder(tree['A'])
    print()
    postorder(tree['A'])

 

728x90