穿越树

时间:2013-03-06 09:20:11

标签: c++ tree-traversal

我正在使用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
        }
    }
}

我尝试过如上所述,但它没有返回确切的节点索引。我在哪里做错了。

1 个答案:

答案 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;

您应该提高编译器的警告级别。