CS 공부/백준 - Python

[백준 1991번] 트리 순회 - 파이썬(Python)

nanocat 2022. 12. 9. 01:09

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

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net

def preorder(tree, node, visit_list):
    visit_list.append(node)
    if (tree[node][0] != '.'):
        preorder(tree, tree[node][0], visit_list)
    if (tree[node][1] != '.'):
        preorder(tree, tree[node][1], visit_list)
        
def inorder(tree, node, visit_list):
    if (tree[node][0] != '.'):
        inorder(tree, tree[node][0], visit_list)
    visit_list.append(node)
    if (tree[node][1] != '.'):
        inorder(tree, tree[node][1], visit_list)

def postorder(tree, node, visit_list):
    if (tree[node][0] != '.'):
        postorder(tree, tree[node][0], visit_list)
    if (tree[node][1] != '.'):
        postorder(tree, tree[node][1], visit_list)
    visit_list.append(node)
        
def main():
    n = int(input().strip())
    tree = {}
    visit_list = []
    for _ in range(n):
        node_list = input().strip().split(' ')
        tree[node_list[0]] = [node_list[1], node_list[2]]
        
    preorder(tree, 'A', visit_list)
    for v in visit_list:
        print(v, end='')
    print()
    visit_list = []
    inorder(tree, 'A', visit_list)
    for v in visit_list:
        print(v, end='')
    print()
    visit_list = []
    postorder(tree, 'A', visit_list)
    for v in visit_list:
        print(v, end='')
    print()
    visit_list = []
    
if __name__ == '__main__':
    main()