当前位置: 首页 > 知识库问答 >
问题:

二叉搜索树findNode方法总是返回根

曹嘉许
2023-03-14

我有一个整数的二叉搜索树,包括1、2、...、9。我的遍历方法工作,我知道节点在那里,并且以正确的顺序。

 //this method calls findNode(int,BSTNode) and prints a message if the value is found
// in the tree
public void searchPrint(int value)
{
    System.out.print(value);
    if (findNode(value, root) == null)
    {
        System.out.println(" does not exist in the tree.");
    } else
    {
        System.out.println(" exists in the tree.");
    }
}//end searchPrint(int) ----------------------------------------------------

//this method recursively looks for the node that contains 'value' and 
//returns that node if it is found.  Returns null if no nodes contain
//the value.
private BSTNode findNode(int value, BSTNode current)
{
    if(current != null)
    {
        if (value == current.getValue())
        {
            System.out.print("  **Test* entering "
                    + "if(value = current.value loop...**  ");

            return current;
        } else 
        {
            if (value < current.getValue())
            {
                findNode(value,current.getLeft());
            } else 
            {
                findNode(value,current.getRight());
            }
        }
    } else
    {
        return null;
    }
    return current;
}//end findNode(int,BSTNode) -----------------------------------------------
    Traversals:

in-order
1
2
3
4
5
6
7
8
9
pre-order
6
2
1
4
3
5
7
9
8
post-order
1
3
5
4
2
8
9
7
6
7  **Test* entering if(value = current.value loop...**   exists in the tree.
5  **Test* entering if(value = current.value loop...**   exists in the tree.
6  **Test* entering if(value = current.value loop...**   exists in the tree.
1  **Test* entering if(value = current.value loop...**   exists in the tree.
12 exists in the tree.
15 exists in the tree.

我在纸上写下了当我搜索一个值时发生的事情,它返回根是没有意义的。我做错了什么?

共有1个答案

宋高谊
2023-03-14

在对findNode()的递归调用中缺少return,所以它总是在方法的末尾到达return

更改为:

private BSTNode findNode(int value, BSTNode current)
{
    if(current != null)
    {
        if (value == current.getValue())
        {
            System.out.print("  **Test* entering "
                    + "if(value = current.value loop...**  ");

            return current;
        } else 
        {
            if (value < current.getValue())
            {
                return findNode(value,current.getLeft());
            } else 
            {
                return findNode(value,current.getRight());
            }
        }
    } else
    {
        return null;
    }
    return current;
}
 类似资料:
  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来

  • 问题在于从搜索函数返回的MyClass对象(mc)。 我跟踪到Search()并确保“r- “退货”有什么问题吗 谢啦! 我有点困惑。。我可以改为“数据类型BST::搜索(常量字符串名称)”而不是“数据类型*BST::搜索(常量字符串名称)”。。。。编译器似乎无法通过。返回NULL将有一些问题。。。 但是我尝试了你的方法来更改DataType*没有de::getIthem()它仍然有错误.....

  • 我正在尝试为我一直在研究的BST结构实现一个移除方法。以下是包含查找、插入和删除方法的代码: 我被告知可以使用insert方法来帮助我使用remove方法,但我只是不知道如何获取最小/最大的元素,然后用该值替换我正在删除的元素,然后递归地删除我获取替换值的节点,同时仍然保持O(logn)的复杂性。有人有什么想法或明显的漏洞我错过了,或任何其他有帮助的,因为我撞我的头在这个问题上? 编辑:我用答案的

  • 我正在制作一个按字符串键排序的二叉搜索树。每个节点由一个与一个键相关联的无序信息链表组成。这棵树是按字母顺序排列的。 我已经完成了大部分的程序,但有麻烦的删除方法。 谢谢你。

  • 我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码: