Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СД Практика 5

.pdf
Скачиваний:
3
Добавлен:
17.06.2025
Размер:
585 Кб
Скачать
☆

2.6 Метод Minimum()

Метод Minimum() находит наименьший элемент в дереве и возвращает его. Происходит проверка узлов, если дерево пустое, то метод возвращает null. Если же элементы имеются в дереве, то с помощью цикла while метод проходит по левым поддеревьям, пока не найдет наименьший элемент. Реализация метода представлена на рисунке 2.7.

Рисунок 2.7 – Метод Minimum()

Результат работы программы представлен на рисунке 2.8.

Рисунок 2.8 – Результат

11

Заключение

В ходе выполнения данной практической работы было реализовано бинарное дерево поиска с помощью классов, а также типовые методы для работы с ним.

12

Приложение А

public class Node

{

public int Data; public Node Left; public Node Right;

public Node(int data)

{

Data = data;

Left = null;

Right = null;

}

}

public class Tree

{

public Node Root;

public Tree()

{

Root = null;

}

public bool AddItem(int a)

{

if (Root == null)

{

Root = new Node(a);

13

return true;

}

return AddItemRecursive(Root, a);

}

private bool AddItemRecursive(Node node, int a)

{

if (node.Data == a)

{

return false;

}

if (a < node.Data)

{

if (node.Left == null)

{

node.Left = new Node(a); return true;

}

else

{

return AddItemRecursive(node.Left, a);

}

}

else

{

if (node.Right == null)

{

14

node.Right = new Node(a); return true;

}

else

{

return AddItemRecursive(node.Right, a);

}

}

}

public bool RemoveItem(int a)

{

if (Root == null)

{

return false;

}

return RemoveItemRecursive(ref Root, a);

}

private bool RemoveItemRecursive(ref Node node, int a)

{

if (node == null)

{

return false;

}

if (a < node.Data)

{

15

return RemoveItemRecursive(ref node.Left, a);

}

else if (a > node.Data)

{

return RemoveItemRecursive(ref node.Right, a);

}

else

{

if (node.Left == null && node.Right == null)

{

node = null; return true;

}

if (node.Left == null)

{

node = node.Right; return true;

}

else if (node.Right == null)

{

node = node.Left; return true;

}

Node minimum = FindMin(node.Right); node.Data = minimum.Data;

RemoveItemRecursive(ref node.Right, minimum.Data); return true;

}

}

16

private Node FindMin(Node node)

{

while (node.Left != null)

{

node = node.Left;

}

return node;

}

public int? Minimum(Node node)

{

if (node == null)

{

return null;

}

while (node.Left != null)

{

node = node.Left;

}

return node.Data;

}

public void Clear()

{

Root = null;

Console.WriteLine("Дерево срублено!");

}

17

public void PrintTree()

{

if (Root == null)

{

Console.WriteLine("От дерева один пенек :("); return;

}

Queue<Node> tree = new Queue<Node>(); tree.Enqueue(Root);

while (tree.Count > 0)

{

Node current = tree.Dequeue();

Console.Write(current.Data + " ");

if (current.Left != null)

{

tree.Enqueue(current.Left);

}

if (current.Right != null)

{

tree.Enqueue(current.Right);

}

}

Console.WriteLine();

}

}

18

public class Program

{

public static void Main()

{

try

{

Tree CoconutTree = new Tree();

Console.Write("Введите элементы для добавления через пробел: "); string coconuts = Console.ReadLine();

int[] ArrayCoconuts = coconuts.Split(' ').Select(x => int.Parse(x)).ToArray();

for (int i = 0; i < ArrayCoconuts.Length; i++)

{

CoconutTree.AddItem(ArrayCoconuts[i]);

}

Console.Write("Дерево: ");

CoconutTree.PrintTree();

Console.Write("Самый маленький элемент: ");

int? TheSmallestCoconut = CoconutTree.Minimum(CoconutTree.Root); Console.WriteLine(TheSmallestCoconut);

Console.Write("Введите элемент, который хотите удалить: "); int RemovedCoconut = int.Parse(Console.ReadLine()); CoconutTree.RemoveItem(RemovedCoconut);

19

Console.Write("Дерево после удаления элемента: ");

CoconutTree.PrintTree();

Console.Write("Самый маленький элемент после удаления: "); TheSmallestCoconut = CoconutTree.Minimum(CoconutTree.Root); Console.WriteLine(TheSmallestCoconut);

CoconutTree.Clear();

}

catch(Exception)

{

Console.WriteLine("Что-то пошло не так :(");

}

}

}

20

Соседние файлы в предмете Структуры данных