using System.Collections.Generic;
public class Node<T> where T : IComparable
public T value { get; set; }
public Node<T> left { get; set; }
public Node<T> right { get; set; }
public class Tree<T> where T : IComparable
public Node<T> GetRoot() { return root; }
public T GetValue() { return root.value; }
root = new Node<T>(value);
private void AddNode(Node<T> currentNode, T value)
if (value.CompareTo(currentNode.value) < 0)
if (currentNode.left == null)
currentNode.left = new Node<T>(value);
AddNode(currentNode.left, value);
if (currentNode.right == null)
currentNode.right = new Node<T>(value);
AddNode(currentNode.right, value);
public class Traversal: Tree<int>
public string TreeTraversalDirect(Tree<int> root)
string s = TreeTraversalDirectResolt(root.GetRoot());
private static string TreeTraversalDirectResolt(Node<int> currentNode)
s = Convert.ToString(currentNode.value) + " ";
s += TreeTraversalDirectResolt(currentNode.left);
s += TreeTraversalDirectResolt(currentNode.right);
public string TreeTraveralWidth(Tree<int> root)
string s = TreeTraveralWidthResolt(root.GetRoot());
private static string TreeTraveralWidthResolt(Node<int> currentNode)
var queue = new Queue<Node<int>>();
s += currentNode.value.ToString() + " ";
queue.Enqueue(currentNode);
if (queue.Peek().left != null)
s += queue.Peek().left.value.ToString() + " ";
queue.Enqueue(queue.Peek().left);
if (queue.Peek().right != null)
s += queue.Peek().right.value.ToString() + " ";
queue.Enqueue(queue.Peek().right);
public static void Main()
List<Tree<int>> trees = new List<Tree<int>>();
var tr = new Traversal();
Console.WriteLine("Меню");
Console.WriteLine("1. Добавить дерево");
Console.WriteLine("2. Обход деревьев вглубь");
Console.WriteLine("3. Обход деревьев вширь");
Console.WriteLine("0. Выход");
line = Console.ReadLine();
switch (Convert.ToInt32(line))
Console.WriteLine("\nСпасибо за использование программы");
Console.WriteLine("\nДля завершения внесения данных введите 'Конец'");
line = Console.ReadLine();
t.Add(Convert.ToInt32(line));
Console.WriteLine("\nОбход деревьев вглубь:");
for (int i = 0; i < count; i++)
Console.WriteLine((i + 1) + ". " + tr.TreeTraversalDirect(trees[i]) + "\n");
Console.WriteLine("\nОбход деревьев вширь:");
for (int i = 0; i < count; i++)
Console.WriteLine((i + 1) + ". " + tr.TreeTraveralWidth(trees[i]) + "\n");
private static bool isNumber(string s)
return s.All(char.IsDigit);