Open AlyonaHaiova opened 4 years ago
These answers were discussed during lectures: Рекурсивні
Бінарний пошук, лінійний пошук (для b tree). Алгорими повороту, балансування, обхід дерева
Пошук, вставка, видалення, пошук в ширину, пошук в глибину (дфс, бфс)
представлення дерева у впорядкованому масиві,
Найменьший спільний предок
Discussion from previous years: Вставка Видалення Пошук Балансування, перебалансування
Порівняння піддерев
Обхід Знаходження висоти Вставка, пошук Балансування Видалення
Визначення (найпершого) спільного предка
Обхід Пошук наступного і попереднього Мінімальне / максимальне значення Сортування Повороти під-дерева
Також можуть знадобитися алгоритми об'єднання дерев (тут можливі різні варіанти, як і просте під'єднання кореня одного дерева до іншого дерева, так і послідовне включення вершин в нове дерево,) Із попереднього може знадобитися також якийсь цікавий алгоритм поєднання двох нестандартних дерев. Наприклад, дерева, що використовуються для вирішення проблеми об'єднання елементів ( типу людей у соц мережах, або у житті і тд).
Доступ до конкретного елемента, Подання дерева у вигляді польського запису, Перевірка, чи є дерево BST
Знаходження всіх листочків дерева; знаходження загальної кількості елементів дерева (хоча швидше буде зберігати це значення окремо).
Знаходження всіх листочків дерева; знаходження загальної кількості елементів дерева (хоча швидше буде зберігати це значення окремо).
Справді це краще зберігати окремо, оскільки це займає лише декілька бітів пам'яті, але оскільки більшісті випадках така задача не стоїть, і лише в декількох випадках таке може трапитися, для таких випадків гіпотетично можна передати у функцію обходу дерева певний лічильник на основі функціонального програмування (або по типу tree.stream().count()
)
Алгоритм знаходження наступного по значенню ключа елемента дерева (Цей алгоритм часто використовується в алгоритмі видалення обєкту з дерева, але також може бути корисним і в інших випадках)
Які алгоритми для роботи з деревами потрібні?