-3

私は以前にBSTを作成しました。これを使用して、変更せずにBSTを作成できますか?

template <class Item>
class binary_tree_node
{
  public:

  private:
    Item data_field;
    binary_tree_node *left_ptr;
    binary_tree_node *right_ptr;
};

これでBSTを作ってみましたが、問題が発生しました。まず、ルートノードを作成すると、その子ノードへのポインターにアクセスできません。

4

3 に答える 3

3

いいえ、「パブリックメンバー関数をここに配置する」というクラスでBSTを作成することはできません。

かなりハッキーなtypedefとマクロがないとコンパイルすらできません。

于 2010-02-08T02:36:53.983 に答える
2

変更なしで、いいえ。

しかし、その行「パブリックメンバー関数をここに配置する」は、それを変更する必要があると叫んでいます。

パーミッションの問題について話しているので、それはあなたが無料の機能を使おうとしていることを意味します。ただし、ポインタはプライベートであるため、それらにアクセスすることはできません。

あなたがすべきことは、メンバー関数を作成することです。例えば:

class binary_tree_node
{
  public:
    binary_tree_node()
    {
    }

    bool is_item_in_tree(const Item &item)
    {
    }

    ...
};

とにかく、可視性とOOPに関するC++の基本を確認することをお勧めします。

于 2010-02-08T03:02:04.247 に答える
0

通常、新しいItemクラスの比較インターフェイスを提供する必要があります。挿入と削除の操作のため、比較が必要です。

<具体的な情報が提供されていないため、>関係演算子などを使用するかどうかはわかりませんが、使用する場合は、新しいItemクラスがこれらの演算子をサポートしていることを確認する必要があります。

Compクラスの比較インターフェイスを提供するために、一般的な比較クラス名を1つ追加することをお勧めしますItem

于 2010-02-08T11:12:22.257 に答える