【问题标题】:Creating a non-binary tree structure in C++在 C++ 中创建非二叉树结构
【发布时间】:2016-07-30 09:05:49
【问题描述】:

我需要帮助来创建非二叉树结构。此结构必须包含一个类node,其中包含指向节点的指针数量与节点所需的数量一样多。这就是我感到困惑的地方。

这是我的班级node

class nodo{
public:
    int id;
    char info[255];
    nodo **son,*father;
    nodo()
    {
        strcpy(info,"");
        son=(nodo*)malloc(sizeof(nodo));
    }
};

据我了解,每次我需要一个新的son 指针时,我都必须执行以下代码:

son=(nodo*)realloc(sizeof(nodo)*t)

t 是我要添加的节点数加 1。我似乎无法理解如何访问指针。比如我已经添加了2个sons,我想访问第二个,应该怎么做?

还有其他方法可以解决这个问题吗?

任何帮助将不胜感激。

【问题讨论】:

  • 不,realloc 有 2 个参数:前一个指针和新的 total 大小,包括新旧元素。此外,**son 表示儿子是指向指针的指针,而不是直接指向节点的指针。另外,为什么在创建节点时会自动创建“儿子”?当然,您只在需要时才向节点添加儿子?

标签: c++ class pointers dynamic tree


【解决方案1】:

您正在编写 C++,而不是 C。不要尝试从头开始重新实现您自己的动态数组。标准库已经有 std::vector 为您处理。

class nodo{
public:
    int id;
    std::string info;
    nodo *parent;
    std:::vector<nodo *> children;

    nodo(nodo *parent) : parent(parent)
    {
    }

    void add_child(nodo *child) { children.push_back(child); }
};

【讨论】:

  • 既然你提到了 C++ 标准库的特性,为什么不更进一步,在这里使用智能指针,如果这确实是一个有用的用例呢?
  • @SirDarius:因为这里没有足够的信息来确定情况是否如此。
  • 嗨!感谢您的回复。不过只是一个快速的疑问。当我添加一个新的孩子时,我该怎么做?有什么好的矢量教程吗?
【解决方案2】:

您正在尝试为每个节点动态创建一个子指针数组。只要您事先知道该节点将拥有多少个子节点,这种方法就可以了。

您的构造函数应该如下所示:

nodo(int numsons) {
   son = new nodo*[numsons];
}

这将分配一个子节点数组,您需要在解构器中将其删除。

如果您事先不知道该节点将有多少个子节点(当您调用构造函数时),您应该使用向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2014-10-01
    相关资源
    最近更新 更多