Я пытаюсь напечатать мой BST так, чтобы он печатался так:
50, 11
45,72
40,12
30,16
20,16
10,54
Мой код не делает это так, как я хотел бы, но вот оно:
void AVLTree::printHelp(Node * node)
{
if (node == 0) {
return;
}
printHelp(node->left);
indent = "";
for (size_t i = 1; i < calculateHeight(node); i++)
{
indent += " ";
}
cout << '\n' << indent << node->value;
printHelp(node->right);
}
Есть как минимум две проблемы с вашим кодом:
Чтобы увидеть дерево, нужно наклонить голову влево. Поэтому вы должны сначала рекурсивно распечатать право потомок, потом узел, потом оставил ребенок.
Пересчитывая высоту узла для отступа, вы возводите в квадрат сложность этой операции.
Попробуйте что-то вроде этого:
#include <string>
void AVLTree::printHelp(const Node *const node, size_t height)
{
if (node == 0) {
return;
}
printHelp(node->right, height + 1);
cout << string(height, ' ') << node->value << endl;
printHelp(node->left, height + 1);
}
Звоните это с
printHelp(root, 0);
Других решений пока нет …