Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace d1
- {
- // Клас за представяне на възел от дървото
- public class Node<T>
- {
- // Поле за съхранение на стойността на възела
- public T Value { get; set; }
- // Поле за съхранение на връзки към децата на възела
- public List<Node<T>> Children { get; set; }
- // Конструктор с параметър за стойността на възела
- public Node(T value)
- {
- Value = value;
- Children = new List<Node<T>>();
- }
- }
- // Клас за представяне на дърво
- public class Tree<T>
- {
- // Поле за съхранение на корена на дървото
- private Node<T> root;
- // Конструктор без параметри
- public Tree()
- {
- root = null;
- }
- // Метод за проверка дали дървото е празно
- public bool IsEmpty()
- {
- return root == null;
- }
- // Метод за добавяне на корен на дървото
- public void AddRoot(T value)
- {
- if (IsEmpty()) // Ако дървото е празно
- {
- root = new Node<T>(value); // Създаваме нов възел с посочената стойност и го задаваме за корен
- }
- else // Ако дървото не е празно
- {
- throw new InvalidOperationException("Дървото вече има корен."); // Хвърляме изключение
- }
- }
- // Метод за добавяне на дете към даден родителски възел
- public void AddChild(Node<T> parent, T value)
- {
- if (parent == null) // Ако родителският възел е null
- {
- throw new ArgumentNullException("Родителският възел не може да бъде null."); // Хвърляме изключение
- }
- Node<T> child = new Node<T>(value); // Създаваме нов възел с посочената стойност
- parent.Children.Add(child); // Добавяме новия възел като дете към родителския възел
- }
- // Метод за премахване на корена на дървото
- public T RemoveRoot()
- {
- if (IsEmpty()) // Ако дървото е празно
- {
- throw new InvalidOperationException("Дървото е празно."); // Хвърляме изключение
- }
- T value = root.Value; // Запазваме стойността на корена в променлива
- root = null; // Задаваме корена да сочи към null, което означава, че дървото става празно
- return value; // Връщаме запазената стойност като резултат от метода
- }
- // Метод за премахване на дете от даден родителски възел по индекс
- public T RemoveChild(Node<T> parent, int index)
- {
- if (parent == null) // Ако родителският възел е null
- {
- throw new ArgumentNullException("Родителският възел не може да бъде null."); // Хвърляме изключение
- }
- if (index < 0 || index >= parent.Children.Count) // Ако индексът е извън границите на списъка с деца
- {
- throw new ArgumentOutOfRangeException("Индексът е извън границите на списъка с деца."); // Хвърляме изключение
- }
- T value = parent.Children[index].Value; // Запазваме стойността на детето в променлива
- parent.Children.RemoveAt(index); // Премахваме детето от списъка с деца
- return value; // Връщаме запазената стойност като резултат от метода
- }
- // Метод за връщане на корена на дървото без да го премахваме
- public Node<T> GetRoot()
- {
- if (IsEmpty()) // Ако дървото е празно
- {
- throw new InvalidOperationException("Дървото е празно."); // Хвърляме изключение
- }
- return root; // Връщаме корена като резултат от метода
- }
- // Метод за връщане на дете от даден родителски възел по индекс без да го премахваме
- public Node<T> GetChild(Node<T> parent, int index)
- {
- if (parent == null) // Ако родителският възел е null
- {
- throw new ArgumentNullException("Родителският възел не може да бъде null."); // Хвърляме изключение
- }
- if (index < 0 || index >= parent.Children.Count) // Ако индексът е извън границите на списъка с деца
- {
- throw new ArgumentOutOfRangeException("Индексът е извън границите на списъка с деца."); // Хвърляме изключение
- }
- return parent.Children[index]; // Връщаме детето като резултат от метода
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement