[백준] 1991 - 트리 순회
1. 문제
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