Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Вывести бинарное дерево в StringGrid


Автор: SuperRustam 29.12.2010, 18:40
С++.

Как вывести бинарное дерево в StringGrid? Оно должно быть по структур выведено. Т.е. меньший эл-т левее, больший - правее, корень - выше и по середине

Автор: cyberstream 29.12.2010, 20:03
Так и выводи.

StringGrid1->Cells[левее][строка] = меньший 
StringGrid1->Cells[правее][строка] = больший 
StringGrid1->Cells[посередине][строка выше] = корень 

Автор: xvr 31.12.2010, 14:44
Цитата(SuperRustam @ 29.12.2010,  18:40)
Как вывести бинарное дерево в StringGrid? Оно должно быть по структур выведено. Т.е. меньший эл-т левее, больший - правее, корень - выше и по середине

Рекурсивно. Сначала выводится левая ветка (входные параметры - строка,колонка, выходные - количество колонок), потом сам узел (выше на 1 строку и правее на 1 колонку, чем правая граница выведенного поддерева), потом правое поддерево (колонка - следующая)
Код

int draw_tree(Tree* node, int col=0, int row=0)
{
 int width=0;
 if (node->left)
  {
   width=draw_tree(node->left,col,row+1);
   col+=width;
  }
 StringGreed->Cells[col][row]=node->Text; // Добавить: сделать resize грида, если надо
 width++; col++;
 if (node->right)
  {
   width+=draw_tree(node->right,col,row+1);
  }
 return width; 
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)