2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Изображение бинарного дерева
Сообщение05.07.2006, 14:20 
Подскажите, как изобразить на экране бинарное дерево (узлы - кружочки), чтобы оно было максимально ужато, но узлы не перекрывались.

 
 
 
 
Сообщение05.07.2006, 17:26 
Если сверху вниз, то посередине рисуем вершину, а потом на следующей строчке рекурсивно левое и правое поддерево на соответствующих половинах.

 
 
 
 
Сообщение05.07.2006, 18:35 
Тогда на третьем, четвертом уровне начинают пересекаться. Может есть алгоритм, чтобы подбирать приращения по x и y, в зависимости от высоты дерева. чтобы, если дерево полное, то листы стоят рядом, а размещение их предков в зависимости от расстояния между листами?

 
 
 
 
Сообщение06.07.2006, 15:31 
Ну можно пробовать танцевать от листов, но я предлагаю несколько по другому. Вывод на всю ширину экрана трудностей не составляет, но тогда невысокое дерево далеко не ужато. Значит в зависимости от высоты дерева считаем при какой ширине дерево ужато и в этой области рисуем.
Попробую на Паскале реализовать эту идею.

 
 
 
 
Сообщение06.07.2006, 16:51 
Аватара пользователя
:evil:
Самое простое решение -- рекурсивно пройти по дереву и подсчитать ширину поодерева для каждого узла. После чего рисование становится заметно проще.

Остаются, тем не менее, вопросы эстетики, что делать, если негде хранить ширину, и многие другие.

 
 
 
 
Сообщение07.07.2006, 11:57 
Цитата:
Остаются, тем не менее, вопросы эстетики, что делать, если негде хранить ширину, и многие другие.

А сделать ширину членом класса узла - это сильно неэстетично или допустимо?

 
 
 
 
Сообщение07.07.2006, 13:21 
Аватара пользователя
А почему бы не воспользоваться готовым решением: http://graphviz.org/ ?

 
 
 
 
Сообщение07.07.2006, 14:20 
Цитата:
А почему бы не воспользоваться готовым решением: http://graphviz.org/ ?

Программа-то хорошая, но мне нужен алгоритм для рисования дерева в своей программе.

Кстати оттуда наткнулся на интересную книжку по рисованию графов http://www.cs.brown.edu/~rt/papers/gd-tutorial/gd-constraints.pdf Попробую разобраться

 
 
 
 
Сообщение07.07.2006, 18:01 
Аватара пользователя
:evil:
temp писал(а):
А сделать ширину членом класса узла - это сильно неэстетично или допустимо?

Разумеется, эстетичо и допустимо. Эстетика, о которой я говорил -- это как дерево "смотрится" на экране, сильно ли оно перекошено -- то есть, чисто вопросы восприятия картинки человеком.

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group