递归搜索二叉树问题

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第二个参数调用,因为您已经使用第一个部分进行了保护.