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

3. Обхід дерева в ширину. Алгоритм Breath-First-Search (bfs)

Алгоритм BFS спочатку проходить через початковий вузол, потім всі його прямі нащадки, потім їхні прямі нащадки і так далі.

Пошук у ширину

 F, B, G, A, D, I, C, E, H.

В цьому прикладі для зберігання вузлів використовується черга.

Алгоритм BFS складається з наступних кроків:

  1. Додайте до черги кореневий вузол.

  2. Додайте до черги всіх нащадків.

Алгоритм BFS дуже простий і завжди проходить спочатку вузли, найближчі до початкового вузла, а потім більш віддалені і так далі, поки не досягне найвіддаленішого. Алгоритм BFS широко використовується у вирішенні проблем, наприклад, для знаходження найкоротшого шляху в лабіринті.

Приклад 5. Обхід дерева каталогів файлової системи у ширину

Алгоритм Breath-First-Search (BFS)

using System;

using System.Collections.Generic;

using System.IO;

namespace DirectoryTraverserBFS

{

/// <summary>

/// Sample class, which traverses given directory

/// based on the Breath-First-Search (BFS) algorithm

/// </summary>

public static class DirBFS

{

/// <summary>

/// Traverses and prints given directory with BFS

/// </summary>

/// <param name="directoryPath">the path to the directory

/// which should be traversed</param>

static void TraverseDir(string directoryPath)

{

Queue<DirectoryInfo> visitedDirsQueue = new Queue<DirectoryInfo>();

visitedDirsQueue.Enqueue(new DirectoryInfo(directoryPath));

while (visitedDirsQueue.Count > 0)

{

DirectoryInfo currentDir = visitedDirsQueue.Dequeue();

Console.WriteLine(currentDir.FullName);

DirectoryInfo[] children = currentDir.GetDirectories();

foreach (DirectoryInfo child in children)

{

visitedDirsQueue.Enqueue(child);

}

}

}

static void Main()

{

TraverseDir(@"D:\\МНТУ\\For_КПІ-71\\Алгоритми");

Console.ReadKey();

}

}

}

4. Елемент управління TreeView у Windows Form

TreeView представляє візуальний елемент у вигляді дерева. Дерево містить вузли, які представляють об'єкти TreeNode. Вузли можуть містити інші підвузли і можуть перебувати як згорнутому, так і в розгорнутому стані. Всі вузли містяться у властивості Nodes.

Цей елемент можна створити як на етапі проектування за допомогою вікна властивостей (статично), та і динамічно у коді.

4.1. Створення дерева TreeView з використанням вікна властивостей

Для створення елемента потрібно його перетягти на форму з вікна елементів управління (але спочатку треба створити форму).

Фактично, TreeView є контейнером, в якому розміщується дерево.

Якщо ми натиснемо в панелі властивостей на властивість Nodes, то нам відкриється вікно редагування вузлів TreeView.

https://metanit.com/sharp/windowsforms/4.13.php

Приклад 6. Дерево, яке відображає структуру МНТУ

За допомогою кнопок Добавить корень и Добавить ветвь створимо дерево структури МНТУ.

Корінь дерева – МНТУ, на рівні 1 розташовані Департаменти та факультети, на рівні 2 – кафедри.

  1. Додаємо корінь. Властивості Text призначаємо МНТУ. Можна змінити і властивість Name, а також налаштувати інші властивості елементів, наприклад, колір.

  2. Виділяємо корінь дерева, натискаємо кнопку Добавить ветвь. Властивості Text призначаємо Департаменти.

  3. Знову виділяємо корінь дерева, натискаємо кнопку Добавить ветвь. Властивості Text призначаємо Факультети.

  4. Виділяємо вузол Факультети, натискаємо кнопку Добавить ветвь. Властивості Text призначаємо Комп.наук. Додаємо до цього вузла інші факультети і т.д.

В результаті отримуємо таке дерево:

Крім властивостей, які керують візуалізацією, елемент TreeNode має ще ряд важливих властивостей, які ми можемо використовувати у коді.

Основні властивості:

FirstNode: перший дочірній вузол

LastNode: останній дочірній вузол

NextNode: повертає наступний сестринський вузол по відношенню до поточного

NextVisibleNode: повертає наступний видимий вузол по відношенню до поточного

PrevNode: повертає попередній сестринський вузол по відношенню до поточного

PrevVisibleNode: повертає попередній видимий вузол по відношенню до поточного

Nodes: повертає колекцію дочірніх вузлів

Parent: повертає батьківський вузол для поточного вузла

TreeView: повертає об'єкт TreeView, в якому визначено поточний вузол

Основні події:

TreeView має ряд подій, які дозволяють нам управляти деревом. Найбільш важливі з них:

BeforeSelect / AfterSelect: спрацьовує перед / після вибору вузла дерева

BeforeExpand / AfterExpand: спрацьовує перед / після розкриття вузла дерева

BeforeCollapse / AfterCollapse: спрацьовує перед / після приховування вузла дерева.

Основні методи:

Add – додає новий вузол

Expand() – розгортає вузол і всі його підлеглі вузли

ExpandAll() – розгортає все дерево

Remove(node) – видаляє вузол node.