
17.01.2010, 19:41
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Читабельный вывод древообразной структуры на консоль
Функция для вывода читабельной древообразной структуры на консоль.
Писал для дерева такого типа
Код:
class Tree {
public:
std::string value;
std::vector<Tree> tree;
};
также легко будет переделать и под другой тип дерева.
Например если сконструировать дерево след. выражения то вывод будет примерно таким
Код:
[+]-|
|-[1]
|
|-[*]-|
| |-[2]
| |-[3]
Код:
#include <iostream>
#include <string>
#include <vector>
class Tree {
public:
std::string value;
std::vector<Tree> tree;
};
void printTree (Tree tree, int offsetWidth = 0, std::string offsetStr = "") {
std::string str = "[" + tree.value + "]";
std::string offset(offsetWidth + 1, ' '); // +1 because of '-' character on line 19
offset = offset.replace(0, offsetStr.length(), offsetStr);
int length = str.length();
int size = tree.tree.size();
if (offsetWidth > 0) {
offset += "|";
std::cout << offset << "-";
}
std::cout << str;
if (size > 0) {
std::cout << "-|\n";
for (int i = 0; i < size; i++) {
if (offsetWidth > 0) {
printTree(tree.tree[i], length + offsetWidth + 3, offset); // +3 because of '[', ']', '-' characters
}
else {
printTree(tree.tree[i], length + offsetWidth, offset);
}
if (i == size - 1) {
std::cout << offset;
std::cout << "\n";
}
}
}
else {
std::cout << "\n";
}
}
int main (int argc, char* argv[]) {
print(tree);
std::cin.get();
return 0;
}
Последний раз редактировалось rudvil; 17.01.2010 в 22:02..
|
|
|