Sem II (Program I) - N9 Flashcards
Зачем используется стек при поиске в глубину?
Чтобы сохранять порядок узлов вдоль пути.
Wann gilt ein Binärbaum als sortiert?
Бинарное дерево считается отсортированным, если:
- Все узлы в левом поддереве узла меньше самого узла.
- Все узлы в правом поддереве узла больше самого узла.
Как вставить узел в отсортированное бинарное дерево?
Алгоритм решает на каждом узле, куда вставлять новый узел - слева или справа:
- Если значение меньше, проверить, есть ли место слева. Если да, вставить слева. В противном случае продолжить поиск в левом поддереве.
- Если значение больше, действовать аналогично с правой стороны.
- Если значение равно, узел не вставляется, и выводится сообщение об ошибке.
Was passiert, wenn der Baum leer ist?
Новый узел вставляется в качестве корня.
Was ist der Unterschied zwischen Preorder-, Inorder- und Postorder-Durchlauf in binären Bäumen?
Preorder: Корень → левое поддерево → правое поддерево
Inorder: левое поддерево → корень → правое поддерево
Postorder: левое поддерево → правое поддерево → корень
Wie wird ein Preorder-Durchlauf in Java implementiert?
public void preorder() { rekPreorder(root); } private void rekPreorder(BinNode k) { if (k != null) { tuWas(k.inhalt); rekPreorder(k.links); rekPreorder(k.rechts); } }
Welche Schritte sind beim Postorder-Durchlauf erforderlich?
- Обойти левое поддерево
- Обойти правое поддерево
- Посетить корень
Чем поиск в ширину (Levelorder) отличается от других обходов?
Поиск в ширину проходит дерево уровень за уровнем (слой за слоем), в то время как другие обходы являются рекурсивными и учитывают порядок корня и поддеревьев в зависимости от метода.
Wie könnte die Breitensuche in Java implementiert werden?
Поиск в ширину требует очереди для промежуточного хранения узлов текущего уровня:
- Вставить узлы текущего уровня в очередь.
- Последовательно вставлять дочерние узлы каждого узла в очередь.
- Повторять, пока не будут пройдены все уровни.
Welche praktische Anwendung hat die Breitensuche in Bäumen?
- Поиск в игровых деревьях (например, шахматы, шашки).
- Нахождение следующего игрового хода или выигрышной позиции за наименьшее количество ходов.
- Стратегии поиска с ограничением глубины для оптимизации.
Warum ist es wichtig, sich in der Breitensuche die Knoten einer Ebene zu merken?
Чтобы узлы могли быть пройдены в упорядоченном порядке (слева направо), их необходимо сохранить в очереди перед рассмотрением следующего уровня.
Wie wird ein Blattknoten aus einem sortierten Binärbaum entfernt?
- Найти узел, который нужно удалить.
- Удалить узел и установить указатель родительского узла в null.
Wozu wird die Datenstruktur Baum verwendet?
Деревья используются для отображения иерархических структур в наборах данных, например, деревья решений, деревья вывода и структуры баз данных.
Какой уровень доступа (видимости) к классу двоичных узлов вы порекомендуете?
Видимость класса должна быть ограничена (например, private или protected), чтобы избежать прямого доступа к данным узла и защитить структуру данных.
Как можно обойти дерево(3 варианта)?
Tiefensuche: Preorder, Inorder, Postorder
Breitensuche
Was ist der Unterschied zwischen Tiefen- und Breitensuche?
Поиск в глубину: Проходит по узлам вдоль одного пути до конца, прежде чем исследовать другие пути.
Поиск в ширину: Проходит по узлам уровень за уровнем.
Wie kann man Tiefen- und Breitensuche auf Bäumen in Java implementieren?
Поиск в глубину: Рекурсивная реализация, которая обращается к левому и правому поддеревьям.
Поиск в ширину: Использование очереди (Queue) для последовательного посещения узлов одного уровня
Легче ли вставить или удалить узел в отсортированном двоичном дереве?
Вставка обычно проще, так как требует только поиска правильной позиции. Удаление может быть сложнее, особенно когда удаляемый узел имеет два дочерних узла.
Blatt (Terminalknoten)
Knoten ohne Kinder
innerer Knoten
ein Knoten mit mind. einem Kind