@aresouji

Как нарисовать дерево имея его ребра?

Всем привет.
Есть список ребер: [[1, 7], [3, 7], [5, 7], [3, 8], [2, 4], [4, 9], [5, 10], [6, 9], [4, 10]], где цифры - номера вершин. Нужно нарисовать дерево, чтобы ребра (линии) не пересекались, примерно вот так:
192px-Binary_search_tree.svg.png

Может кто-то что-то подсказать?
  • Вопрос задан
  • 557 просмотров
Решения вопроса 4
gbg
@gbg
Любые ответы на любые вопросы
используйте Graphviz
Ответ написан
Комментировать
tsarevfs
@tsarevfs
C++ developer
e7f0c0a6b7724930899a7cac93c25ea5.PNG
Предлагаю рисовать рекурсивно. Нарисовать все поддеревья (обведены синим), потом корень (желтым). Каждое поддерево рисуем по тому же принципу. Если в поддереве 1 вершина -- просто рисуем ее.
Чтобы понять с каким отступом рисовать поддеревья, так же рекурсивно считаем ширину.
Ответ написан
Комментировать
Labunsky
@Labunsky
Я есть на хабре
1. Находим корень дерева и рисуем его на рисунке;
2. Присвоить v корень;
3. Посчитать количество cu ребер таких, что существует [v, u];
4. 140 / cu (или что-то подобное, константы по вкусу) - угол нарисунке между ребрами. Зная угол и вертикальную состовляющую расстояния между уровнями дерева, вычисляем координаты на рисунке вершин u таких, что существует ребро [v, u];
5. Рисуем в вычисленных точках новые вершины. Для каждой из них выполнить алгоритм с пункта 2 (то есть каждая из u должна побывать раз в жизни v).
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Простите, что запоздало вклиниваюсь.
Я как-то отвечал насчёт того, как сделать непересекающееся дерево.
Как построить произвольное дерево?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы