using System; using System.Collections.Generic; using System.Text; namespace Csharp { class Tree { static private StringBuilder stringBuilder = new StringBuilder(); private class Node { public char left = '\0'; public char right = '\0'; public Node(char l, char r) { left = l; right = r; } } private Node[] nodes = new Node[26]; public enum EOrder { Pre, In, Post } public void Insert(char root, char left, char right) { int index = getIndex(root); nodes[index] = new Node(left, right); } public string Order(EOrder method) { stringBuilder.Clear(); switch (method) { case EOrder.Pre: preOrderHelper('A'); break; case EOrder.In: inOrderHelper('A'); break; case EOrder.Post: postOrderHelper('A'); break; } return stringBuilder.ToString(); } private void preOrderHelper(char node) { int index = getIndex(node); char left = nodes[index].left; char right = nodes[index].right; stringBuilder.Append(node); if (left != '.') preOrderHelper(left); if (right != '.') preOrderHelper(right); } private void inOrderHelper(char node) { int index = getIndex(node); char left = nodes[index].left; char right = nodes[index].right; if (left != '.') inOrderHelper(left); stringBuilder.Append(node); if (right != '.') inOrderHelper(right); } private void postOrderHelper(char node) { int index = getIndex(node); char left = nodes[index].left; char right = nodes[index].right; if (left != '.') postOrderHelper(left); if (right != '.') postOrderHelper(right); stringBuilder.Append(node); } private int getIndex(char node) => node - 'A'; } class Program { static int N; static Tree tree = new Tree(); static void Main(string[] args) { N = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < N; ++i) { var inputs = Console.ReadLine().Split(); char root = Convert.ToChar(inputs[0]); char left = Convert.ToChar(inputs[1]); char right = Convert.ToChar(inputs[2]); tree.Insert(root, left, right); } Console.WriteLine(tree.Order(Tree.EOrder.Pre)); Console.WriteLine(tree.Order(Tree.EOrder.In)); Console.WriteLine(tree.Order(Tree.EOrder.Post)); } } } |