2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Изображение бинарного дерева
Сообщение05.07.2006, 14:20 


01/01/06
35
Подскажите, как изобразить на экране бинарное дерево (узлы - кружочки), чтобы оно было максимально ужато, но узлы не перекрывались.

 Профиль  
                  
 
 
Сообщение05.07.2006, 17:26 


07/02/06
96
Если сверху вниз, то посередине рисуем вершину, а потом на следующей строчке рекурсивно левое и правое поддерево на соответствующих половинах.

 Профиль  
                  
 
 
Сообщение05.07.2006, 18:35 


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

 Профиль  
                  
 
 
Сообщение06.07.2006, 15:31 


07/02/06
96
Ну можно пробовать танцевать от листов, но я предлагаю несколько по другому. Вывод на всю ширину экрана трудностей не составляет, но тогда невысокое дерево далеко не ужато. Значит в зависимости от высоты дерева считаем при какой ширине дерево ужато и в этой области рисуем.
Попробую на Паскале реализовать эту идею.

 Профиль  
                  
 
 
Сообщение06.07.2006, 16:51 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Самое простое решение -- рекурсивно пройти по дереву и подсчитать ширину поодерева для каждого узла. После чего рисование становится заметно проще.

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

 Профиль  
                  
 
 
Сообщение07.07.2006, 11:57 


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

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

 Профиль  
                  
 
 
Сообщение07.07.2006, 13:21 
Модератор
Аватара пользователя


11/01/06
5710
А почему бы не воспользоваться готовым решением: http://graphviz.org/ ?

 Профиль  
                  
 
 
Сообщение07.07.2006, 14:20 


01/01/06
35
Цитата:
А почему бы не воспользоваться готовым решением: http://graphviz.org/ ?

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

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

 Профиль  
                  
 
 
Сообщение07.07.2006, 18:01 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
temp писал(а):
А сделать ширину членом класса узла - это сильно неэстетично или допустимо?

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: dgwuqtj


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group