0

望ましい動作

次のように、追加のタブを付けて BST の各レベルを出力します。

        level1
               level2
level0
               level2
        level1
               level2

実際の動作

        level1
                     level2
level0
               level2
        level1
                     level2

これが私の現在のコードです。どこが間違っているのかわかりません。

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

    }
4

1 に答える 1

1

コードには少なくとも 2 つの問題があります。

  1. 木を見るには、頭を左に傾ける必要があります。したがって、最初に右の子、次にノード、次にの子を再帰的に出力する必要があります。

  2. インデントのノードの高さを再計算することで、この操作の複雑さを 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);
于 2016-03-29T18:00:10.277 に答える