在我正在研究的项目的一部分中,我正在实现一个AVL树。我需要实现的函数之一是接收和Key的数组(树的键的模板类)和一个int指针(我需要插入AVL树的大小)。在这个函数中,我需要以特定顺序将树的元素插入到数组中(现在无关紧要)。
这是函数的签名,它必须是这样的:GetAllAppsByDownloads(Key **apps, int *numOfApps)
但是由于某些原因我没能实现它。我遇到了一些问题,主要的是显然我错误地分配了内存(我希望数组初始化为Key的默认值)然后当我插入键时它们没有被正确插入。
这就是我从我构建的测试中调用函数的方式(也许我做错了吗?):
int* keyArr;
int numApps;
tree.GetAllAppsByData(&keyArr,&numApps);
for(int i=0; i<numApps; i++){
cout<<keyArr[i]<<endl;
}
这些是我的职能:
void GetAllAppsByData(Key** apps, int*numOfApps){
AVL_node<Dat,Key,OS>* temp=(getRoot());
*numOfApps=size;
*apps=(new Key[size]()); /*size represents the amount of elements.
its a variable in the private section of the class*/
KeyIntoArrByData(temp, apps, 0);
};
void KeyIntoArrByData(AVL_node<Dat,Key,OS>* root, Key** array, int i){
if(root==NULL) return;
KeyIntoArrByData(root->right, array, i);
array[i]=&(root->key);
i++;
KeyIntoArrByData(root->left, array, i);
}
/* P.S Dat and OS are other template variables I receive from the user, they
don't matter here*/
我认为密钥被错误插入的原因是因为i
在我从递归中恢复时发生了变化但是我找不到它的解决方案(我尝试在类中添加另一个int,我会只在这个函数中使用,所以当递归返回时它将保持为新值),不介意一些帮助哈哈。
但这不是大问题,它插入数组的元素插入不正确(放入垃圾而不是键),注意:只正确插入array[0]
。
请帮我看看我做错了什么:(
答案 0 :(得分:0)
我不确定你的所有问题是否存在,但是你是按价值传递我的,并且需要通过参考来传递你的使用方式。
void KeyIntoArrByData(AVL_node<Dat,Key,OS>* root, Key** array, int &i)