Advertisement
CR7CR7

tree-d1

Jul 14th, 2023
746
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.03 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace d1
  5. {
  6.     // Клас за представяне на възел от дървото
  7.     public class Node<T>
  8.     {
  9.         // Поле за съхранение на стойността на възела
  10.         public T Value { get; set; }
  11.  
  12.         // Поле за съхранение на връзки към децата на възела
  13.         public List<Node<T>> Children { get; set; }
  14.  
  15.         // Конструктор с параметър за стойността на възела
  16.         public Node(T value)
  17.         {
  18.             Value = value;
  19.             Children = new List<Node<T>>();
  20.         }
  21.     }
  22.  
  23.     // Клас за представяне на дърво
  24.     public class Tree<T>
  25.     {
  26.         // Поле за съхранение на корена на дървото
  27.         private Node<T> root;
  28.  
  29.         // Конструктор без параметри
  30.         public Tree()
  31.         {
  32.             root = null;
  33.         }
  34.  
  35.         // Метод за проверка дали дървото е празно
  36.         public bool IsEmpty()
  37.         {
  38.             return root == null;
  39.         }
  40.  
  41.         // Метод за добавяне на корен на дървото
  42.         public void AddRoot(T value)
  43.         {
  44.             if (IsEmpty()) // Ако дървото е празно
  45.             {
  46.                 root = new Node<T>(value); // Създаваме нов възел с посочената стойност и го задаваме за корен
  47.             }
  48.             else // Ако дървото не е празно
  49.             {
  50.                 throw new InvalidOperationException("Дървото вече има корен."); // Хвърляме изключение
  51.             }
  52.         }
  53.  
  54.         // Метод за добавяне на дете към даден родителски възел
  55.         public void AddChild(Node<T> parent, T value)
  56.         {
  57.             if (parent == null) // Ако родителският възел е null
  58.             {
  59.                 throw new ArgumentNullException("Родителският възел не може да бъде null."); // Хвърляме изключение
  60.             }
  61.  
  62.             Node<T> child = new Node<T>(value); // Създаваме нов възел с посочената стойност
  63.  
  64.             parent.Children.Add(child); // Добавяме новия възел като дете към родителския възел
  65.         }
  66.  
  67.         // Метод за премахване на корена на дървото
  68.         public T RemoveRoot()
  69.         {
  70.             if (IsEmpty()) // Ако дървото е празно
  71.             {
  72.                 throw new InvalidOperationException("Дървото е празно."); // Хвърляме изключение
  73.             }
  74.  
  75.             T value = root.Value; // Запазваме стойността на корена в променлива
  76.  
  77.             root = null; // Задаваме корена да сочи към null, което означава, че дървото става празно
  78.  
  79.             return value; // Връщаме запазената стойност като резултат от метода
  80.         }
  81.  
  82.         // Метод за премахване на дете от даден родителски възел по индекс
  83.         public T RemoveChild(Node<T> parent, int index)
  84.         {
  85.             if (parent == null) // Ако родителският възел е null
  86.             {
  87.                 throw new ArgumentNullException("Родителският възел не може да бъде null."); // Хвърляме изключение
  88.             }
  89.  
  90.             if (index < 0 || index >= parent.Children.Count) // Ако индексът е извън границите на списъка с деца
  91.             {
  92.                 throw new ArgumentOutOfRangeException("Индексът е извън границите на списъка с деца."); // Хвърляме изключение
  93.             }
  94.  
  95.             T value = parent.Children[index].Value; // Запазваме стойността на детето в променлива
  96.  
  97.             parent.Children.RemoveAt(index); // Премахваме детето от списъка с деца
  98.  
  99.             return value; // Връщаме запазената стойност като резултат от метода
  100.         }
  101.  
  102.         // Метод за връщане на корена на дървото без да го премахваме
  103.         public Node<T> GetRoot()
  104.         {
  105.             if (IsEmpty()) // Ако дървото е празно
  106.             {
  107.                 throw new InvalidOperationException("Дървото е празно."); // Хвърляме изключение
  108.             }
  109.  
  110.             return root; // Връщаме корена като резултат от метода
  111.         }
  112.  
  113.         // Метод за връщане на дете от даден родителски възел по индекс без да го премахваме
  114.         public Node<T> GetChild(Node<T> parent, int index)
  115.         {
  116.             if (parent == null) // Ако родителският възел е null
  117.             {
  118.                 throw new ArgumentNullException("Родителският възел не може да бъде null."); // Хвърляме изключение
  119.             }
  120.  
  121.             if (index < 0 || index >= parent.Children.Count) // Ако индексът е извън границите на списъка с деца
  122.             {
  123.                 throw new ArgumentOutOfRangeException("Индексът е извън границите на списъка с деца."); // Хвърляме изключение
  124.             }
  125.  
  126.             return parent.Children[index]; // Връщаме детето като резултат от метода
  127.         }
  128.     }
  129. }
  130.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement