当前位置: 首页 > 知识库问答 >
问题:

C中的BinaryTree节点类

沈鸿光
2023-03-14

我试图建立一个二叉树实现的节点类。以下是节点类的头文件:

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、父字段?它们也是节点,所以我想在它们上调用默认构造函数,但它似乎不起作用。Node::Node(int value) : value(value), parent(), leftChild(), rightChild(){ }

编译器表示“对类型‘Node’的引用需要一个初始值设定项”

谢谢

共有3个答案

东方灵均
2023-03-14

您可以更好地使用指针(Node*)而不是引用(Node

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

仇迪
2023-03-14

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

虞展
2023-03-14

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

 类似资料:
  • 这是我的remove函数,用于删除具有元素的节点。我得到了一个seg错误,我很确定这是因为temp->prev是前面的哨兵,所以从技术上来说,它不在双链表中。如果这是正确的,我实际上如何防止这种情况?如有任何帮助,不胜感激。 编辑:刚刚更新了代码,但仍然出现了Seg错误

  • 我正在编写一段C代码来执行有向图的广度优先遍历。 在main函数中,我总共定义了7个节点,并在它们之间建立了连接。一个节点是包含名称、值和所有子节点列表的结构。 我调用函数breadthFirstTraverse(constNode 我的主要问题是,深层节点的列表似乎为空,即使子节点已添加到其中。 节点: 节点: 遍历函数: 这是输出。您可以看到,node2和node3没有子节点,即使节点被添加到

  • 本文向大家介绍从C#中的LinkedList中删除指定的节点?,包括了从C#中的LinkedList中删除指定的节点?的使用技巧和注意事项,需要的朋友参考一下 要从LinkedList中删除指定的节点,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 本文向大家介绍C++删除链表中间节点的方法,包括了C++删除链表中间节点的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++删除链表中间节点的方法。分享给大家供大家参考,具体如下: 题目: 给定链表头结点head,实现删除链表的中间节点函数。 解题思路及代码: 快慢指针,快指针走两步,慢指针一步。 当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。 链表结构定义: 算法

  • 双链表节点是在main函数中创建的。Ender和header已定义。在删除节点函数处中断-ender为空。 释放最后一个和第一个输入的内存的最佳方法是什么,即:删除:233,A和888,F?

  • 我需要将子元素复制到父元素中。 输入 期望输出 我尝试的内容(输出与输入保持相同): 我肯定会错过一些非常简单的事情。子元素与父元素具有相同的名称,这应该不是问题?