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

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

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

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

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

textual
Листинг программы
class Program
{
    public static void Main()
    {
        //создаем дерево людей:)
        Tree<Human> tree = new Tree<Human>();
 
        //список людишек
        List<Human> humanList = new List<Human>()
        {
            new Human(30) { Name = "Bill"},
            new Human(20) { Name = "John" },
            new Human(16) { Name = "Быдло"},
            new Human(19) { Name = "Красавчик"}
        };
            
        //добавляем людей в дерево
        tree.AddElement(humanList);
 
        //трай кетч, ибо метод обобщенный
        try
        {
            var human = tree.GetElement(new Human(19));//ищем людишку по возрасту
            Console.WriteLine("Искомый чувак по возрасту: {0}, Имя: {1}", 19 , human.Name);
        }
        catch (NotExistNodeExeption<Human> ex) //если чИлавека не существует в дереве
        {
            Console.WriteLine("Чувау с возрастом {0} не существет в дереве", ex.Element);
        }
        Console.ReadLine();
    }
 
    //наш класс человек
    class Human : IComparable
    {
        public int Age { get; set; }
        public string Name { get; set; }
 
        public Human(int age)
        {
            Age = age;
        }
 
        //реализация интерфейса сравнения
        public int CompareTo(object otherHuman)
        {
            Human human = otherHuman as Human;
 
            if (Age < human.Age)
                return -1;
            else if (Age > human.Age)
                return 1;
            else
                return 0;
        }
 
        public override string ToString()
        {
            return Age.ToString();
        }
    }
 
    //класс елемента дерева
    class Node<T> where T : IComparable
    {
        public Node<T> Left { get; set; }
        public Node<T> Right { get; set; }
        public T Element { get; set; }
 
        public Node(T element)
        {
            Element = element;
        }
    }
 
    public class Tree<T> where T : IComparable
    {
        //верхушка дерева дерева
        private Node<T> _root;
 
        //добавление эл-та
        public void AddElement(T newElement)
        {
            //если нет корня еще, то newElement становиься верхушкой
            if (_root == null)
            {
                _root = new Node<T>(newElement);
                return;
            }
            //Рекурсивное добавления
            AddElementRecursion(_root, newElement);
        }
 
        //добавление массива ел-тов 
        public void AddElement(IEnumerable<T> newElements)
        {
            foreach (var newElement in newElements)
            {
                AddElement(newElement);
            }
        }
 
        //тут все вроде ясно
        private void AddElementRecursion(Node<T> currentNode, T newElement)
        {
            if (currentNode.Element.CompareTo(newElement) < 0)
            {
                if (currentNode.Right == null)
                    currentNode.Right = new Node<T>(newElement);
                else
                    AddElementRecursion(currentNode.Right, newElement);
            }
            else
            {
                if (currentNode.Left == null)
                    currentNode.Left = new Node<T>(newElement);
                else
                    AddElementRecursion(currentNode.Left, newElement);
            }
        }
 
        //рекурсивный поиск эл.та
        public T GetElement(T element)
        {
            return GetElementRecursion(_root, element);
        }
 
        //если нет ел-та в дереве, выбрасывается исключение
        private T GetElementRecursion(Node<T> currentNode, T element)
        {
            if (currentNode == null)
                throw new NotExistNodeExeption<T>(element);
            else if (currentNode.Element.CompareTo(element) < 0)
                return GetElementRecursion(currentNode.Right, element);
            else if (currentNode.Element.CompareTo(element) > 0)
                return GetElementRecursion(currentNode.Left, element);
            else
                return currentNode.Element;
        }
    }
 
    //класс исключения, просто так запилил :)
    public class NotExistNodeExeption<T> : Exception
    {
        public T Element { get; set; }
 
        public NotExistNodeExeption(T element)
        {
            Element = element;
        }
    }
}

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


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

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

15   голосов , оценка 3.733 из 5
Похожие ответы