我想创建一个非二叉树。我想到了这种带有指针指针
的结构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");
}
答案 0 :(得分: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_ptr
中有namespace std
和namespace boost
答案 1 :(得分:1)
您永远不会在son
分配一个数组,只需一个tree
。
您正在完全复制std::vector
的功能。使用std::vector
而不是自己管理阵列。
答案 2 :(得分: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有什么好处?