Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия, Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки
Подскажите, как изобразить на экране бинарное дерево (узлы - кружочки), чтобы оно было максимально ужато, но узлы не перекрывались.
Werwolf
05.07.2006, 17:26
Если сверху вниз, то посередине рисуем вершину, а потом на следующей строчке рекурсивно левое и правое поддерево на соответствующих половинах.
temp
05.07.2006, 18:35
Тогда на третьем, четвертом уровне начинают пересекаться. Может есть алгоритм, чтобы подбирать приращения по x и y, в зависимости от высоты дерева. чтобы, если дерево полное, то листы стоят рядом, а размещение их предков в зависимости от расстояния между листами?
Werwolf
06.07.2006, 15:31
Ну можно пробовать танцевать от листов, но я предлагаю несколько по другому. Вывод на всю ширину экрана трудностей не составляет, но тогда невысокое дерево далеко не ужато. Значит в зависимости от высоты дерева считаем при какой ширине дерево ужато и в этой области рисуем.
Попробую на Паскале реализовать эту идею.
незваный гость
06.07.2006, 16:51
Самое простое решение -- рекурсивно пройти по дереву и подсчитать ширину поодерева для каждого узла. После чего рисование становится заметно проще.
Остаются, тем не менее, вопросы эстетики, что делать, если негде хранить ширину, и многие другие.
temp
07.07.2006, 11:57
Цитата:
Остаются, тем не менее, вопросы эстетики, что делать, если негде хранить ширину, и многие другие.
А сделать ширину членом класса узла - это сильно неэстетично или допустимо?
А сделать ширину членом класса узла - это сильно неэстетично или допустимо?
Разумеется, эстетичо и допустимо. Эстетика, о которой я говорил -- это как дерево "смотрится" на экране, сильно ли оно перекошено -- то есть, чисто вопросы восприятия картинки человеком.