我想实现一个二叉树,其中每个节点都包含left
和right
子树。以下是我班级的样子:
class KDTree
{
public:
KDTree(...);
~KDTree();
private:
LatLng element; // The value of the node
KDTree left; // The left sub-tree
KDTree right; // The right sub-tree
};
然后我的构造函数看起来像这样:
KDTree::KDTree(...)
{
value = ...;
if(not_finished)
{
left = KDTree(...);
right = KDTree(...);
}
else
{
left = NULL; // how to implement this properly ?
right= NULL; // how to implement this properly ?
}
}
如果我按照上面的说明尝试放置NULL
,那么编译器会抱怨left
和right
属性未初始化。我该怎么做呢?
答案 0 :(得分:2)
左右应该是这样的KDTree指针:KDTree * left,KDTree * right。然后Null将按原样使用
此外,在第一个if语句中,您可能需要更改
left = KDTree (...);
right = KDTree (...);
到
left = new KDTree (...);
right = new KDTree (...);
答案 1 :(得分:1)
这个例子不完整,所以我只是根据我所看到的内容进行猜测。
KDTree left
和KDTree right
是对象,而不是指针。因此,您无法为其分配NULL
。尝试将它们变成指针:
class KDTree
{
public:
KDTree(...);
~KDTree();
// Note: You'll have to clean up your left and right trees in the destructor!
private:
LatLng element; // The value of the node
KDTree * left; // The left sub-tree
KDTree * right; // The right sub-tree
};
KDTree::KDTree(...)
{
value = ...;
if(not_finished)
{
left = new KDTree(...); // recursive constructor call (nuh-uh! see below)
right = new KDTree(...); // recursive constructor call (nuh-uh! see below)
}
else
{
left = NULL; // how to implement this properly ?
right= NULL; // how to implement this properly ?
}
}
另外一个FYI:我看到你的"递归构造函数调用"在那里评论。那不太对劲。在原始代码中,left = KDTree(...);
不以递归方式调用构造函数。它只是将新的KDTree
分配给left
(我猜测KDTree
有一个赋值运算符)。