私は C++ でハッシュ ツリーをコーディングしています。2 つの異なるタイプのノードが必要です。
私が直面している問題は、どうすれば非リーフ ノードでポインタを宣言できるかということです。一部の非葉ノードは他の非葉ノードを指し、一部は葉ノードを指さなければならないためです。したがって、非リーフ ノードのポインターへのポインター型を 1 つ宣言することはできません。
どんな助けでも大歓迎です。
私は C++ でハッシュ ツリーをコーディングしています。2 つの異なるタイプのノードが必要です。
私が直面している問題は、どうすれば非リーフ ノードでポインタを宣言できるかということです。一部の非葉ノードは他の非葉ノードを指し、一部は葉ノードを指さなければならないためです。したがって、非リーフ ノードのポインターへのポインター型を 1 つ宣言することはできません。
どんな助けでも大歓迎です。
リーフ ノードと非リーフ ノードを使用するのではなく、データ ポインターを持つノード クラスを 1 つだけ使用できます。ノードがリーフ ノードでない場合、データ ポインタは になりますNULL
。ノードがリーフ ノードの場合、Node*
は になりますNULL
。
struct Node
{
Node *child; // NULL if leaf node
Data *data; // NULL if not leaf node
};
問題のポインターがノードまたはリーフを指しているかどうかを示すヘッダー内のユニオンとフラグを使用して、これに取り組みます。
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;
}