我正在使用TreeDecomposition,其中树中的每个节点都可以从图中有多个顶点。
现在,我正在尝试找到包含第一个节点的内容来自树根的顶点u 。
int Tree::traversing(Node* node, int u){
//search in current node
int j = node->point_in_bag(u); //this function returns position of vertex u in node if not available -1
if(j != -1){
return node->index;
}
else{
// traverse in its children
for(int k=0; k<node->children.size(); k++){ // children has the node's childs in it
Node* nod = node->children[k];
cout << "nod index is " << nod->index << endl;
traversing(nod,u); // if vertex isn't found in node, traverse again in its children
}
}
}
我尝试过如上所述,但它没有返回确切的节点索引。我在哪里做错了。
答案 0 :(得分:2)
你忘记了return
:
traversing(nod,u);
所以你的递归调用返回一些随机数据(并且有未定义的行为)。
即使您已经返回,您也只会从第一个孩子那里返回索引 你需要继续寻找是否找不到它。
for(int k=0; k<node->children.size(); k++){
Node* nod = node->children[k];
int childIndex = traversing(nod,u);
if (childIndex != -1)
return childIndex;
}
return -1;
您应该提高编译器的警告级别。