|
А дерево нужно строить в текстовом режиме или можно графическими библиотеками?
В любом случае,можно написать некоторую рекурсивную процедуру (пример для графичекого отображения), основные шаги которой таковы:
x,y - координаты дерева
N - номер просматриваемого символа - перменная должна быть глобальной или введена в выражении польской записи спец символом или иметь там фиксированное место, пусть это будет первый символ - вариантов масса на самом деле
char * tree(char* str, int x, int у)
{
1)Отрисовываем знак текущей операции (N-тый символ в выражении) в точке (x,y)
2) Отрисовываем две ветви, определяем координаты концов ветвей
3) просматриваем (N--) символ:
если это "знак операции", то tree(str, текущее X, текущее Y, текущее N)
иначе отрисовываем этот символ
4) просматриваем (N--) символ:
если это "знак операции", то tree(str, текущее X, текущее Y, текущее N)
иначе отрисовываем этот символ
}
Минусы подхода: невозожно при таком подходе сделать красивое, ровное дерево - при одном дереве оно будет слишком растянуто, в другом случае - одни ветви будут наезжать на другие... Проблема лечится разбиением задачи на два этапа: на первом мы определяем характеристики дерева (например число уровней дерева), возможно, формируем некоторую новую структуру, где записываем все те данные для корректного отображения дерева (структуру формируем таким образом, что просматривая ее последовательно, не производя доп. вычислений, сразу отобразить нужное дерево); на втором этапе - отрисовка дерева с учетом информации, которую мы получили на первом этапе.
Последний раз редактировалось Trotil; 23.10.2005 в 15:23.
|