我正在用C ++编写一个哈希树,我需要两种不同类型的节点,一个用于非叶子,一个用于指向其子节点,另一个用于包含所需信息的叶子节点。
我面临的问题是如何在非叶子节点中声明指针。因为一些非叶节点要指向其他非叶节点,一些非叶节点必须指向叶节点。所以我不能向非叶节点中的指针声明一个指针类型。
任何帮助都将不胜感激。
答案 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相同,并且如果您不喜欢工会,则取决于品味更清洁的代码。