2016-04-08 139 views
-1

我需要帮助创建一个非二叉树结构。该结构必须包含一个类node,其中包含尽可能多的指向节点的节点所需的指针。这是我感到困惑的地方。在C++中创建一个非二叉树结构

这里是我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,我想访问第二个,我应该怎么做?

有没有其他解决方法?

任何帮助将被感谢。

+0

不,realloc需要2个参数:前一个指针和新的* total *大小,包括新旧元素。此外,'** son'表示son是指向指针的指针,不是直接指向节点的指针。 另外,为什么当你创建一个节点时,你会自动创建一个“儿子”?当你需要它们时,你只能将节点添加到节点上吗? – kfsone

回答

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); } 
}; 
+0

由于您提到了C++标准库的特性,为什么不更进一步并在这里使用智能指针?如果这确实是一个有用的用例? – SirDarius

+0

@SirDarius:因为这里没有足够的信息可以肯定是这种情况。 –

+0

嗨!感谢您的回复。尽管如此,只是一个疑问。 当我添加一个新的孩子时,我该如何去做呢? 任何好的矢量教程? –

0

您正试图为每个节点动态创建一个子指针数组。只要您知道节点将事先拥有多少个孩子,这种方法就没有问题。

你的构造应该是这个样子:

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

这将拨出子节点,您将需要在解构删除阵列。

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