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);
}
该计划在最后一行实际上做了什么......任何人都可以解释一下。?
答案 0 :(得分:2)
以递归方式探索左侧分支,查找target
,然后右侧分支查找target
。
更具体地说,算法可以做到这一点:
||
上的短路将使该方法立即返回||
表达式中的第二个子表达式,递归到右子树中寻找目标,返回表示在右子树中存在target
的布尔值答案 1 :(得分:0)
程序将相同的方法(dfs)应用于树的左右分支,并返回两个结果的“OR”。
基本上,如果在当前节点中找不到目标,则检查它是否可以在左分支或右分支中找到。这是递归应用的,直到没有剩下的节点(当它匹配第一个root为null的情况时)。
你可以在这里查看我的答案: Recursion - trying to understand 并看看它是否有助于理解问题。
答案 2 :(得分:0)
它正在进行递归调用,首先探索左侧,然后是右侧子树。
这意味着它将首先向左下方,直到它到达一片叶子,然后回溯并向右下方。
如果它在左侧或右侧子树中找到目标,则返回true。
答案 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
时,该方法也会递归地应用于右子树。