我正在尝试为二叉树实现构建一个节点类。这是Node类的头文件:
class Node {
public:
Node();
Node(int value);
void setParent(Node& parent);
void setLeftChild(Node& child);
void setRightChild(Node& child);
void setValue(int value);
void setIndex(int index);
void setHeight(int height);
private:
int value;
Node& parent;
Node& leftChild;
Node& rightChild;
int height;
int index;
};
现在,我想编写上面声明的构造函数Node(int value)。 我该如何初始化leftChild,rightChild,父字段?它们也是Node,因此我想在它们上调用默认构造函数,但它似乎不起作用。 Node :: Node(int value):value(value),parent(),leftChild(),rightChild(){ }
编译器说“对类型'Node'的引用需要一个初始化器”
感谢。
答案 0 :(得分:0)
您最好使用指针(Node*
)而不是引用(Node&
)。在构造函数中,只需为它们分配nullptr
。
引用某些对象是必要的(显然,当你没有左或右孩子时,你无法引用它们)。所以指针来这里是为了帮助你 - 它们允许指向任何东西 - 在这种情况下nullptr
被用作任何东西。
答案 1 :(得分:0)
您应该使用指定节点父节点的构造函数: 节点(Node * parent,int value); 创建根节点时,只需将NULL作为参数调用此构造函数。 所有对父母和孩子的引用都应该是指针。
答案 2 :(得分:0)
在这种情况下,在引用上使用指针并将它们初始化为NULL是有意义的。通过执行此操作,您还可以通过检查NULL指针来检查节点是否具有子节点或父节点(即,不是根节点)。另外,请务必添加析构函数以释放内存。