C++中的BinaryTree节点类

BinaryTree Node Class in C++

本文关键字:节点 BinaryTree 中的 C++      更新时间:2023-10-16

我正在尝试为二进制树实现构建一个节点类。这是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值)。如何初始化leftChild、rightChild和父字段?它们也是节点,所以我想调用它们的默认构造函数,但它似乎不起作用。节点::节点(int值):值(value),parent(),leftChild(),rightChild({}

编译器说"对类型‘Node’的引用需要一个初始值设定项"

谢谢。

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

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

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

引用是引用某个对象所必需的(很明显,当你没有左或右子对象时,你就不能引用它们)。所以这里的指针可以帮助你——它们允许指向任何东西——在这种情况下,nullptr被当作什么都不用。