Java算法深度优先搜索

时间:2012-01-31 10:16:00

标签: java algorithm

boolean dfs(TreeNode root, int target) {
        if (root == null)
            return false;
        if (root.data == target)
            return true;
        return dfs(root.left, target) || dfs(root.right, target);
    }

该计划在最后一行实际上做了什么......任何人都可以解释一下。?

5 个答案:

答案 0 :(得分:2)

以递归方式探索左侧分支,查找target,然后右侧分支查找target

更具体地说,算法可以做到这一点:

  • 如果在此节点中找到目标,则返回true
  • 否则,递归到左子树寻找目标
  • 如果target在左子树中,那么递归调用将返回true并且||上的短路将使该方法立即返回
  • 否则评估||表达式中的第二个子表达式,递归到右子树中寻找目标,返回表示在右子树中存在target的布尔值

答案 1 :(得分:0)

程序将相同的方法(dfs)应用于树的左右分支,并返回两个结果的“OR”。

基本上,如果在当前节点中找不到目标,则检查它是否可以在左分支或右分支中找到。这是递归应用的,直到没有剩下的节点(当它匹配第一个root为null的情况时)。

你可以在这里查看我的答案: Recursion - trying to understand 并看看它是否有助于理解问题。

答案 2 :(得分:0)

它正在进行递归调用,首先探索左侧,然后是右侧子树。

这意味着它将首先向左下方,直到它到达一片叶子,然后回溯并向右下方。

如果它在左侧或右侧子树中找到目标,则返回true。

http://en.wikipedia.org/wiki/Depth-first_search

答案 3 :(得分:0)

这是一个递归调用,其中dfs首先遍历所有节点离开root,然后所有节点都直接到root,并且'OR'这两个调用的结果返回true或false。

答案 4 :(得分:0)

最后一行

return dfs(root.left, target) || dfs(root.right, target);

相当于

if (dfs(root.left, target)) {
   return true;
}
return dfs(root.right, target);

换句话说,该方法递归地应用于左子树。仅当返回false时,该方法也会递归地应用于右子树。