【问题标题】:BinaryTree Node Class in C++C++ 中的二叉树节点类
【发布时间】:2013-07-06 06:48:46
【问题描述】:

我正在尝试为二叉树实现构建一个节点类。这是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'类型的引用需要一个初始化器”

谢谢。

【问题讨论】:

  • 引用需要引用一个对象。所以你需要一个对象供他们参考。
  • 引用需要绑定到已经存在的对象。
  • 所有这些设置器都没有意义(即使它们是可能的,但您永远不能设置引用),只需直接将数据成员公开即可。或者(更好),使构建树的方法成为朋友......另外,如果孩子们是彼此的邻居,那么只需一个指向第一个孩子的指针就足够了,右孩子就在它旁边(child[0], child[1])
  • 谢谢大家!问题解决了。当我应该使用指针时,我仍然使用引用。

标签: c++ binary-tree


【解决方案1】:

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

【讨论】:

  • 是的,指点! Java 让我习惯了在 C++ 中的引用,对应的是指针。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2015-09-02
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2021-07-12
      相关资源
      最近更新 更多