문제번호: 1991
문제명: 트리 순회
문제링크: https://www.acmicpc.net/problem/1991
문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다
오늘은 트리순회 문제를 풀었습니다. 이 문제에서는 이진트리를 순회하는 방식이 3가지 존재합니다. 전위, 중위, 후위 순회입니다. (3가지 순회 방식에 대해서는 문제 링크로 확인해주시면 감사하겠습니다.)
이 문제를 해결하기 위해 Node의 정보를 담는 클래스를 만들어주었습니다. 노드 클래스에는 노드의 값, 왼쪽자식, 오른쪽자식이 들어있습니다.
트리입력을 받고 Node생성 및 정보입력을 한 후 노트리스트에 노드들을 하나씩 넣어주었습니다.
전위, 중위, 후위 순회 메서드들을 하나씩 생성하고 출력과 양쪽 재귀 순서를 전위, 중위, 후위에 맞게 변화를 주었습니다.
그 결과 전위, 중위, 후위 순회 순서에 맞게 결과값들이 출력됩니다.
다음은 정답코드입니다.
class Hello
{
public static void Main()
{
using StreamReader sr = new StreamReader(Console.OpenStandardInput());
using StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int N = int.Parse(sr.ReadLine());
List<Node> Nodes = new List<Node>();
for (int i = 0; i < N; i++)
{
string[] input = sr.ReadLine().Split();
char parentChar = input[0][0]; // 여기 질문
char leftChar = input[1][0];
char rightChar = input[2][0];
Node parent = GetOrCcreateNode(Nodes, parentChar);
if (leftChar != '.')
{
parent.Left = GetOrCcreateNode(Nodes, leftChar);
}
if (rightChar != '.')
{
parent.Right = GetOrCcreateNode(Nodes, rightChar);
}
}
Node root = Nodes.Find(n => n.Value == 'A');
Preorder(root);
sw.WriteLine();
Inorder(root);
sw.WriteLine();
Postorder(root);
void Preorder(Node node)
{
if (node == null) return;
sw.Write(node.Value);
Preorder(node.Left);
Preorder(node.Right);
}
void Inorder(Node node)
{
if (node == null) return;
Inorder(node.Left);
sw.Write(node.Value);
Inorder(node.Right);
}
void Postorder(Node node)
{
if (node == null) return;
Postorder(node.Left);
Postorder(node.Right);
sw.Write(node.Value);
}
sr.Close();
sw.Close();
}
static Node GetOrCcreateNode(List<Node> nodes, char value)
{
Node node = nodes.Find(n => n.Value == value);
if (node == null)
{
node = new Node(value);
nodes.Add(node);
}
return node;
}
}
class Node
{
public char Value;
public Node Left;
public Node Right;
public Node(char value)
{
Value = value;
}
}
'알고리즘 풀이' 카테고리의 다른 글
| [C#] 백준 27964번 문제풀이 (1) | 2026.03.02 |
|---|---|
| [C#] 백준 4673번 문제풀이 (0) | 2026.03.01 |
| [C#] 백준 2470번 문제풀이 (0) | 2026.02.27 |
| [C#] 백준 2467번 문제풀이 (0) | 2026.02.26 |
| [C#] 백준 2606번 문제풀이 (0) | 2026.02.26 |