指向两种不同类型节点的指针

时间:2013-04-12 18:50:47

标签: c++

我正在用C ++编写一个哈希树,我需要两种不同类型的节点,一个用于非叶子,一个用于指向其子节点,另一个用于包含所需信息的叶子节点。

我面临的问题是如何在非叶子节点中声明指针。因为一些非叶节点要指向其他非叶节点,一些非叶节点必须指向叶节点。所以我不能向非叶节点中的指针声明一个指针类型。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以只使用一个带有数据指针的节点类,而不是拥有叶节点和非叶节点。如果节点不是叶节点,则数据指针将为NULL。如果节点是叶节点,则Node*将为NULL

struct Node
{
    Node *child; // NULL if leaf node
    Data *data;  // NULL if not leaf node
};

答案 1 :(得分:2)

我会在标题中使用union和一个标志来解决这个问题,它会告诉我有问题的指针是指向节点还是叶子。

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

答案 2 :(得分:0)

有几个解决方案。你可以简单地从叶子中继承一个非叶子,让多态来处理它。或者使用union和flag来确定使用哪一个。或者最脏的,但有时候是有效的,是一个简单的空洞*,你总是可以回到你需要的任何东西。根据您的具体需求:联合将表现最佳,多态性将是最可读的,而void *将与union相同,并且如果您不喜欢工会,则取决于品味更清洁的代码。