Я делаю некоторую практику для предстоящего интервью, и практический вопрос, который я нашел, требует алгоритма O (V + E), чтобы определить, График двоичный. This страница из Принстона говорит, что граф двоичный, если он не имеет шарнирных вершин, где вершина сочленения - это вершина, удаление которой увеличит количество подключенных компонентов (так как битконфигурированный граф должен иметь одну связанную компоненту).Я не понимаю, как этот алгоритм скажет мне, является ли граф двоичным.
Одним из распространенных решений этой проблемы является создание DFS с дополнительным отслеживанием, чтобы увидеть, являются ли какие-либо из вершин вершинами сочленения. This страница говорит, что вершина является артикуляция вершиной, если
- V является корневым узлом по крайней мере, 2 детям ИЛИ
- V есть ребенок, который не может достичь предка V
Однако , условие для корневых узлов для меня не имеет смысла. Ниже приведен пример биконфинированного графика:
Если мы выберем любой из узлов, являющихся корнем, они ВСЕ имеют 2 или более дочерних элементов, поэтому это была бы точка сочленения, что сделало бы граф не двоичным. Это общий алгоритм поиска подключенных компонентов, поэтому предположим, что я что-то не понял. Что мне нужно проверить для корневого узла, чтобы увидеть, является ли граф двоичным?
Я вижу, поэтому узел является дочерним, если он посещен через корневой узел в первый раз? – CAJ
@CAJ Через свой родительский узел, да. –