Как построить бинарное дерево с помощью списка смежности?
Всем привет, суть вопроса такова : Дан неориентированный граф в виде списка смежности , нужно проверить является ли этот граф деревом , если да , то вернуть бинарное дерево построенное с помощью этого списка. Вопрос с проверкой( является ли граф деревом) решен , но не понятно каким образом теперь можно построить из списка смежности это дерево.
Вячеслав Осипов, дерево - это частный случай ациклического графа. Выберите удобную вам структуру для дерева. Так как граф неориентированный, просто берите произвольную вершину и начинайте обход, складывая вершины в выбранную структуру. В конце обхода в этой структуре будет дерево. Правда, не обязательно сбалансированное.
Я так понимаю, на входе у вас массив, содержащий списки соседей(индексы) для каждой вершины графа.
Берите любую вершину, у которой кол-во соседей меньше либо равно двум, и назначаете ее корнем.
Для любой вершины корнем левого поддерева будет первый сосед в списке (если есть), который не совпадает с родительским. Рекурсивно строите левое поддерево.
Корнем правого поддерева будет второй сосед в списке (если есть), который не совпадает с родительским.
Рекурсивно строите правое поддерево.
В итоге получите несортированное несбалансированное бинарное дерево