Если не знаешь чем граф отличается от дерева - вот короткий пост со свойствами дерева. Depth-first-search с использованием Adjacency List В задачах на программирование граф представлен неудобно, обычно в виде массива рёбер или вершин. Для графа на рисунке 1, такое представление может выглядеть как [ [0,1], [0,2], [0,3], [1,4] ] Первое что нужно сделать - преобразовать такой массив в формат с которым удобно работать. Одним из вариантов является AdjacencyList Затем к полученной структуре нужно применить Depth-first-search модифицированный под конкретную задачу. Первая проверка в модифицированном depth-first-search - это проверка на connectivity. В правильном дереве нам должны встретиться все представленные вершины и все они должны быть соединены рёбрами. Ни одна из вершин не должна встретиться больше 1 раза. Но при этом нужно помнить про случаи A -> B -> A в неориентированных графах. Вторая проверка - это попытка ответить на вопрос - "Можем ли мы просто вернуть False если встретили посещ