0

私は C++ でハッシュ ツリーをコーディングしています。2 つの異なるタイプのノードが必要です。

私が直面している問題は、どうすれば非リーフ ノードでポインタを宣言できるかということです。一部の非葉ノードは他の非葉ノードを指し、一部は葉ノードを指さなければならないためです。したがって、非リーフ ノードのポインターへのポインター型を 1 つ宣言することはできません。

どんな助けでも大歓迎です。

4

3 に答える 3

3

リーフ ノードと非リーフ ノードを使用するのではなく、データ ポインターを持つノード クラスを 1 つだけ使用できます。ノードがリーフ ノードでない場合、データ ポインタは になりますNULL。ノードがリーフ ノードの場合、Node*は になりますNULL

struct Node
{
    Node *child; // NULL if leaf node
    Data *data;  // NULL if not leaf node
};
于 2013-04-12T18:59:58.913 に答える
2

問題のポインターがノードまたはリーフを指しているかどうかを示すヘッダー内のユニオンとフラグを使用して、これに取り組みます。

struct Header
{
   int isLeaf;
}

struct Leaf
{
    struct Header header;
    struct LeafBody body;
}

struct Node
{
    struct Header header;
    struct NodeBody body;
}

union Entity
{
    struct Header header;
    struct Node   node;
    struct Leaf   leaf;
}
于 2013-04-12T18:53:36.850 に答える