1. 문제

1991번: 트리 순회



2. 개요

이진 트리를 입력받아 전위순회, 중위순회, 후위순회한 결과를 출력하는 문제.



3. 풀이 및 코드

3-1. 풀이

말 그대로 전위순회, 중위순회, 후위순회한 결과를 출력하면 된다.

3-2. Python

import sys

tree = dict()

N = int(sys.stdin.readline())

for i in range(N):
    info = list(sys.stdin.readline().split())

    tree[info[0]] = [info[1], info[2]]

def preorder(n):
    print(n, end = '')

    for nxt in tree[n]:
        if nxt != '.':
            preorder(nxt)

def inorder(n):
    if tree[n][0] != '.':
        inorder(tree[n][0])

    print(n, end = '')

    if tree[n][1] != '.':
        inorder(tree[n][1])
        

def postorder(n):
    if tree[n][0] != '.':
        postorder(tree[n][0])

    if tree[n][1] != '.':
        postorder(tree[n][1])

    print(n, end = '')

preorder('A')
print()
inorder('A')
print()
postorder('A')

3-3. C#

namespace boj_1991
{
    internal class Program
    {
        static Dictionary<char, char[]> tree;

        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());

            tree = new Dictionary<char, char[]>();

            for (int i = 0; i < N; i++)
            {
                char[] info = Array.ConvertAll(Console.ReadLine().Split(), char.Parse);

                tree[info[0]] = new char[] { info[1], info[2] };
            }

            preorder('A');
            Console.WriteLine();
            inorder('A');
            Console.WriteLine();
            postorder('A');
        }

        static void preorder(char c)
        {
            Console.Write(c);

            foreach (char next in tree[c])
            {
                if (next != '.')
                    preorder(next);
            }
        }

        static void inorder(char c)
        {
            if (tree[c][0] != '.')
                inorder(tree[c][0]);

            Console.Write(c);

            if (tree[c][1] != '.')
                inorder(tree[c][1]);
        }

        static void postorder(char c)
        {
            if (tree[c][0] != '.')
                postorder(tree[c][0]);

            if (tree[c][1] != '.')
                postorder(tree[c][1]);

            Console.Write(c);
        }

    }
}

Comments