.NET 2.x Составить описание класса для работы с бинарными деревьями поиска и реализовать основные операции - C#

Узнай цену своей работы

Формулировка задачи:

Составить описание класса для работы с бинарными деревьями поиска (BST). Обеспечить выполнение основных операций: вставки, поиска и удаления элементов. Программа должна содержать меню, позволяющее осуществить вставку или добавление , поиск и удаления элемента.

Решение задачи: «.NET 2.x Составить описание класса для работы с бинарными деревьями поиска и реализовать основные операции»

textual
Листинг программы
  1. class Program
  2. {
  3.     public static void Main()
  4.     {
  5.         //создаем дерево людей:)
  6.         Tree<Human> tree = new Tree<Human>();
  7.  
  8.         //список людишек
  9.         List<Human> humanList = new List<Human>()
  10.         {
  11.             new Human(30) { Name = "Bill"},
  12.             new Human(20) { Name = "John" },
  13.             new Human(16) { Name = "Быдло"},
  14.             new Human(19) { Name = "Красавчик"}
  15.         };
  16.            
  17.         //добавляем людей в дерево
  18.         tree.AddElement(humanList);
  19.  
  20.         //трай кетч, ибо метод обобщенный
  21.         try
  22.         {
  23.             var human = tree.GetElement(new Human(19));//ищем людишку по возрасту
  24.             Console.WriteLine("Искомый чувак по возрасту: {0}, Имя: {1}", 19 , human.Name);
  25.         }
  26.         catch (NotExistNodeExeption<Human> ex) //если чИлавека не существует в дереве
  27.         {
  28.             Console.WriteLine("Чувау с возрастом {0} не существет в дереве", ex.Element);
  29.         }
  30.         Console.ReadLine();
  31.     }
  32.  
  33.     //наш класс человек
  34.     class Human : IComparable
  35.     {
  36.         public int Age { get; set; }
  37.         public string Name { get; set; }
  38.  
  39.         public Human(int age)
  40.         {
  41.             Age = age;
  42.         }
  43.  
  44.         //реализация интерфейса сравнения
  45.         public int CompareTo(object otherHuman)
  46.         {
  47.             Human human = otherHuman as Human;
  48.  
  49.             if (Age < human.Age)
  50.                 return -1;
  51.             else if (Age > human.Age)
  52.                 return 1;
  53.             else
  54.                 return 0;
  55.         }
  56.  
  57.         public override string ToString()
  58.         {
  59.             return Age.ToString();
  60.         }
  61.     }
  62.  
  63.     //класс елемента дерева
  64.     class Node<T> where T : IComparable
  65.     {
  66.         public Node<T> Left { get; set; }
  67.         public Node<T> Right { get; set; }
  68.         public T Element { get; set; }
  69.  
  70.         public Node(T element)
  71.         {
  72.             Element = element;
  73.         }
  74.     }
  75.  
  76.     public class Tree<T> where T : IComparable
  77.     {
  78.         //верхушка дерева дерева
  79.         private Node<T> _root;
  80.  
  81.         //добавление эл-та
  82.         public void AddElement(T newElement)
  83.         {
  84.             //если нет корня еще, то newElement становиься верхушкой
  85.             if (_root == null)
  86.             {
  87.                 _root = new Node<T>(newElement);
  88.                 return;
  89.             }
  90.             //Рекурсивное добавления
  91.             AddElementRecursion(_root, newElement);
  92.         }
  93.  
  94.         //добавление массива ел-тов
  95.         public void AddElement(IEnumerable<T> newElements)
  96.         {
  97.             foreach (var newElement in newElements)
  98.             {
  99.                 AddElement(newElement);
  100.             }
  101.         }
  102.  
  103.         //тут все вроде ясно
  104.         private void AddElementRecursion(Node<T> currentNode, T newElement)
  105.         {
  106.             if (currentNode.Element.CompareTo(newElement) < 0)
  107.             {
  108.                 if (currentNode.Right == null)
  109.                     currentNode.Right = new Node<T>(newElement);
  110.                 else
  111.                     AddElementRecursion(currentNode.Right, newElement);
  112.             }
  113.             else
  114.             {
  115.                 if (currentNode.Left == null)
  116.                     currentNode.Left = new Node<T>(newElement);
  117.                 else
  118.                     AddElementRecursion(currentNode.Left, newElement);
  119.             }
  120.         }
  121.  
  122.         //рекурсивный поиск эл.та
  123.         public T GetElement(T element)
  124.         {
  125.             return GetElementRecursion(_root, element);
  126.         }
  127.  
  128.         //если нет ел-та в дереве, выбрасывается исключение
  129.         private T GetElementRecursion(Node<T> currentNode, T element)
  130.         {
  131.             if (currentNode == null)
  132.                 throw new NotExistNodeExeption<T>(element);
  133.             else if (currentNode.Element.CompareTo(element) < 0)
  134.                 return GetElementRecursion(currentNode.Right, element);
  135.             else if (currentNode.Element.CompareTo(element) > 0)
  136.                 return GetElementRecursion(currentNode.Left, element);
  137.             else
  138.                 return currentNode.Element;
  139.         }
  140.     }
  141.  
  142.     //класс исключения, просто так запилил :)
  143.     public class NotExistNodeExeption<T> : Exception
  144.     {
  145.         public T Element { get; set; }
  146.  
  147.         public NotExistNodeExeption(T element)
  148.         {
  149.             Element = element;
  150.         }
  151.     }
  152. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы