0

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

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");
}
4

3 回答 3

2

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

a->son= new tree*; 

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

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

std::vector< tree * > son;

当然,您仍然需要注意向量中的指针。您可以使用shared_ptr<tree>unique_ptr<tree>如果可用于儿童。

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

或者

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

(在或中带有shared_ptr和)unique_ptrnamespace stdnamespace boost

于 2012-10-23T16:06:00.507 回答
1

您永远不会在 分配一个数组son,而只是一个tree.

您正在std::vector完全复制的功能。使用std::vector而不是自己管理阵列。

于 2012-10-23T15:57:59.660 回答
0

谢谢大家

适用于这些更改

struct tree{
    string name;
    int sonc;
    vector< tree* > son;
};

和插入过程

void insertSon(tree* &a, string n){
tree *atmp;
atmp = new tree;
atmp->name=n;
atmp->sonc=0;
(a->son).push_back(atmp);
a->sonc++;}

shared_ptr 和 unique_ptr 的优点是什么?

于 2012-10-24T09:36:44.597 回答