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
5702
А почему бы не воспользоваться готовым решением: 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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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