C++ C++;电话号码反向搜索的多个子树
我正试图编写一个程序,对电话号码进行反向搜索(用户给出一个号码,程序打印出相应的人+其他属于它的号码)。现在,我已经将这些人的数据保存在一个链表中,并试图建立一棵树 每个树元素将保存一个指向个人数据的指针、一个索引(对应于电话号码的一部分,例如,如果号码以“0”开头,则根的第一个子节点的索引为“0”)和指向其子节点的指针向量 到目前为止,我所能做的是保存树中的第一个给定数字,但在尝试在树中保存多个数字时似乎出现了问题。可能问题在于指向子节点的指针,但我不确定是否存在。下面是代码的上述部分:C++ C++;电话号码反向搜索的多个子树,c++,search,tree,children,inverse,C++,Search,Tree,Children,Inverse,我正试图编写一个程序,对电话号码进行反向搜索(用户给出一个号码,程序打印出相应的人+其他属于它的号码)。现在,我已经将这些人的数据保存在一个链表中,并试图建立一棵树 每个树元素将保存一个指向个人数据的指针、一个索引(对应于电话号码的一部分,例如,如果号码以“0”开头,则根的第一个子节点的索引为“0”)和指向其子节点的指针向量 到目前为止,我所能做的是保存树中的第一个给定数字,但在尝试在树中保存多个数字时似乎出现了问题。可能问题在于指向子节点的指针,但我不确定是否存在。下面是代码的上述部分: cl
class Tree {
public:
Datensatz *data; //data stored in node
char number; //index of node - part of a telephone number
Tree* wurzel; //root
vector<Tree*> nextEls; //vector of children of node
Tree(int zahl);
/*
div. functions
*/
void add(vector<char>); //called to add telephone number to tree
};
void Tree::hinzufRek(vector<char> telNum)
{
Tree *aktEl = new Tree(); //latest node
aktEl=this->wurzel; //starts with root
int check = 0;
for (int i=0; i<telNum(); i++) {
char h = telNum(i);
if(aktEl->nextEls.size()!=0){
int j;
for (j = 0; j<aktEl->nextEls.size(); j++) {
if (h == aktEl->nextEls[j]->number) { //if latest number already exists in node children...
aktEl = aktEl->nextEls[j];
check = 1;
break;
}
}
if (check == 0) {
aktEl->nextEls.push_back(new Tree(h));
aktEl = aktEl->nextEls[j];
}
}
else { //if there are no current children to latest node
aktEl->nextEls.push_back(new Tree(h));
aktEl = aktEl->nextEls[0];
}
}
}
}
类树{
公众:
Datensatz*data;//存储在节点中的数据
char number;//节点索引-电话号码的一部分
树*wurzel;//根
vector nextEls;//节点子节点的向量
树木(int zahl);
/*
部门职能
*/
void add(vector);//调用以将电话号码添加到树中
};
空树::hinzufRek(向量telNum)
{
Tree*aktEl=new Tree();//最新节点
aktEl=this->wurzel;//以root开头
整数检查=0;
对于(int i=0;inquels.size()!=0){
int j;
对于(j=0;jnextEls.size();j++){
如果(h==aktEl->nextEls[j]->number){//如果节点子节点中已经存在最新的编号。。。
aktEl=aktEl->nextEls[j];
检查=1;
打破
}
}
如果(检查==0){
aktEl->nextEls.push_back(新树(h));
aktEl=aktEl->nextEls[j];
}
}
else{//如果没有最新节点的当前子节点
aktEl->nextEls.push_back(新树(h));
aktEl=aktEl->nextEls[0];
}
}
}
}
此外,我认为删除函数末尾的Tree*aktEl对象是个好主意,但这只会导致非常奇怪的结果。我不确定上面的代码是否非常清楚或者是否容易理解,但我希望你们中的一位能够帮助我
也许我只是在监督一些事情
提前谢谢你
roboneko42除非需要当前的实现(例如,作为家庭作业的一部分),否则只需使用
std::map
。同意Jerry的观点,std::map将大大简化您的任务。如果我没有弄错的话,std::map也将数据存储在树结构中,从而可以快速访问您的数据。不,那不是拼写错误。如需删除,请使用唯一\u ptr
。