DFS:使用深度优先搜索(java)查找节点的路径

时间:2016-10-22 00:12:38

标签: java algorithm data-structures tree depth-first-search

我有一棵树。此树中的所有节点都具有一些true / false值,一个元素和父/子指针。此树中的一个元素将true / false值设置为true。我想找到从根到这个唯一节点的路径(元素序列)。所以,如果我的树看起来像这样:

     A
    / \
   B   C
  /     \
 D       E
        / \
       F   G
          / \
         H   I

特殊节点是H,我的算法将返回字符串“ACEGH”。我已经使用DFS实现了这一点。但是,我当前的算法是从不正确的路径添加节点的元素。所以我现在的算法将返回:“ABDCEFGHI”。

private String dfs(Node node, String path) {

    if(node.special){
        return key;
    }

    for(Node n: node.children){
        if(n != null){
            path = path + n.element;
            dfs(n, path);
        }
    }
    return null;
}

1 个答案:

答案 0 :(得分:0)

如果n.element返回dfs(解释为表示尚未找到解决方案路径),则需要从路径中删除 null。在dfs返回非空值时,您还应该停止检查子项。

要使其正常工作,dfs一旦找到路径就会返回非null值,无论它处于什么级别。