Распечатать бинарное дерево поиска с отступами

Я пытаюсь напечатать мой 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);

}

1

Решение

Есть как минимум две проблемы с вашим кодом:

  1. Чтобы увидеть дерево, нужно наклонить голову влево. Поэтому вы должны сначала рекурсивно распечатать право потомок, потом узел, потом оставил ребенок.

  2. Пересчитывая высоту узла для отступа, вы возводите в квадрат сложность этой операции.

Попробуйте что-то вроде этого:

#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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]