Man*_*ish 0 java tree recursion search binary-tree
我已经编写了下面的代码来递归搜索二叉树.即使我的system.out语句被执行,return语句也没有返回整个递归,因此这个方法没有返回true.
任何人都可以建议我如何退出整个递归.?
public static boolean isElementinTree(int num, BinaryTreeNode root)
{
if (root != null)
{
int rootVal = root.getData();
BinaryTreeNode left = root.getLeft();
BinaryTreeNode right = root.getRight();
if (left != null)
{
isElementinTree(num,left);
}
if (right != null)
{
isElementinTree(num,right);
}
if (num == rootVal)
{
System.out.println("------ MATCH -----");
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
这就是问题:
if (left != null)
{
isElementinTree(num,left);
}
if (right != null)
{
isElementinTree(num,right);
}
Run Code Online (Sandbox Code Playgroud)
你在这些情况下调用方法 - 但忽略了结果.我怀疑你只是想改变其中的每一个,如果发现它立即返回:
if (left != null && isElementinTree(num, left))
{
return true;
}
if (right != null && isElementinTree(num, right))
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
或者为了使整个事物更具说明性,你可以更简单地做到:
public static boolean isElementinTree(int num, BinaryTreeNode root)
{
return root != null && (root.getData() == num ||
isElementInTree(num, root.getLeft()) ||
isElementInTree(num, root.getRight()));
}
Run Code Online (Sandbox Code Playgroud)
可以isElementInTree使用null第二个参数调用,因为您已经使用第一个部分进行了保护.