2

我正在尝试为二叉树实现构建一个节点类。这是 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(int value) : value(value), parent(), leftChild(), rightChild(){ }

编译器说“对'Node'类型的引用需要一个初始化器”

谢谢。

4

3 回答 3

0

您最好使用指针 ( Node*) 而不是引用 ( Node&)。在构造函数中只需分配nullptr给它们。

引用是引用某些对象所必需的(显然,当您没有左子或右子时,您无法引用它们)。所以指针来这里是为了帮助你——它们允许指向无——在这种情况下nullptr被用作无。

于 2013-07-08T20:08:35.927 回答
0

您应该使用指定节点父级的构造函数: Node(Node *parent, int value); 创建根节点时,您只需使用 NULL 作为参数调用此构造函数。所有对父母和孩子的引用都应该是指针。

于 2013-07-08T20:13:07.143 回答
0

在这种情况下,在引用上使用指针并将它们初始化为 NULL 是有意义的。通过这样做,您还可以通过检查 NULL 指针来检查节点是否有子节点或父节点(即不是根节点)。另外,一定要添加一个析构函数来释放内存。

于 2013-07-08T20:23:50.857 回答