我试图实现一个树,它存储给定节点上的子矢量。我已经实现了查找节点的find_index
函数。它有两个参数:Node * cur
和一些key
。我在insert
工作时尝试使用此功能,但我不知道要搜索的Node*
。这样的节点必须存在,但我不知道哪个节点要调用find_index
。此外,我不知道我的功能是否正常工作。提前谢谢。
#include <iostream>
#include <vector>
using namespace std;
class Node{
public:
Node *parent;
vector < Node* > children;
string key;
Node(){
parent=NULL;
}
};
class tree{
public:
int size;
tree(){
size=0;
}
Node* find_index(Node *cur,string key){
Node *tmp;
if(cur->key==key){
tmp=cur;
}
if(cur==NULL){
tmp=NULL;
}
for(int i=0;i<cur->children.size();i++){
find_index(cur->children[i],key);
}
return tmp;
}
void add(){
string father,son;
while(cin>>father>>son){
if(find_index(?,father)==NULL){//I don't know what node to put instead of question mark and is my function working
size++;
Node *newnode=new Node();
newnode->key=father;
newnode->parent=NULL;
}
else if(find_index(t,son)==NULL){
size++;
Node *newnode1=new Node();
newnode1->key=son;
newnode1->parent->children.push_back(newnode1);
}
else{
Node *newnode2=new Node();
newnode2->key=father;
Node *newnode3=new Node();
newnode3->key=son;
newnode2->children.push_back(newnode3);
newnode3->parent=newnode2;
}
}
}
};
答案 0 :(得分:1)
我怀疑你的代码是否有效。我可以看到以下问题:
find_index
:如果cur为NULL,则会在cur->key
(第一个if
)find_index
:您永远不会评估foor循环中的结果add
:您需要存储?
部分的树的根目录。 我不知道你的输入实际上是什么样的。如果我们知道输入会描述自上而下的树,我们可以存储一个根。我会在add
期间存储多个根。这样,您也可以自下而上构建树。
可能的解决方案可能是something like this。