c++ - 非二叉树c++

标签 c++ pointers tree binary-tree

我想创建一个非二叉树。我想到了一个指针为指针的这种类型的结构

struct tree{
    string name;
    int sonc;
    tree** son;
};

我为两个大条目崩溃了

void insertSon(tree* &a, string n){

if (a->sonc==0){
    a->son= new tree*;}

a->son[a->sonc]= new tree;
a->son[a->sonc]->name=n;
a->son[a->sonc]->sonc=0;
a->sonc++;}

但也在取消

void deleteTree(tree* &a){
for (int i=0;i<(a->sonc);++i){
    deleteTree(a->son[i]);
}
delete a;}

主要 cpp 与树木种群

tree *tree1;
tree1=new tree;


tree1->name="C:\\TEMP";
tree1->sonc=0;
insertSon(tree1,"C:\\TEMP\\aadvfdbdsbdfgfile1.txt");
insertSon(tree1,"C:\\TEMP\\aadvfdbdsbdfgfile2.txt");
insertSon(tree1,"C:\\TEMP\\FOLDER1");

tree *lastf1=tree1->son[tree1->sonc-1];
insertSon(lastf1,"C:\\TEMP\\FOLDER1\\aadvfdbdsbdfgfile3.txt");
insertSon(lastf1,"C:\\TEMP\\FOLDER1\\aadvfdbdsbdfgfile4.txt");
insertSon(lastf1,"C:\\TEMP\\FOLDER1\\FOLDER2");

tree *lastf2=lastf1->son[lastf1->sonc-1];
for (int i=0;i<100;++i){
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile5.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile6.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile7.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile8.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile9.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileA.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileB.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileC.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileD.txt");
}

最佳答案

您的代码错误在于这一行:

a->son= new tree*; 

只分配一个指针,但您正试图将其用作指针数组。

与其乱用数组,不如使用 vector 。你可以有

std::vector< tree * > son;

当然,您仍然需要处理 vector 中的指针。你可以使用 shared_ptr<tree>unique_ptr<tree>如果 children 可以使用。

std::vector< shared_ptr< tree > > son;

std::vector< unique_ptr< tree > > son;

(shared_ptrunique_ptrnamespace stdnamespace boost 中)

关于c++ - 非二叉树c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13034465/

相关文章:

c++ - 无法在 OpenGL 中渲染天空盒

c++ - 如何更新 C++ 中 for 循环内的单独变量?

dictionary - 为什么 slice 值有时会过时但永远不会映射值?

c - 如何解释 C 中结构的成员访问(点)运算符?

algorithm - 如何检测某个范围是否(部分)位于另一个范围内?

c++ - 后继AVL树c++

c++ - 在 boost-spirit 中解析嵌套数据

c++ - 使用 boost mpl pop_front

c - 从不兼容指针类型进行赋值以及取消引用指针到不完整类型

algorithm - python ete2 二叉树获取后代值之和