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

二叉搜索树搜索返回空值

冯鸿哲
2023-03-14

我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 递归方法。通过调用searchbst(string)启动搜索。<>

使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。

这个方法唯一起作用的时候是在搜索根节点的时候,这对我来说没有任何意义。

    public BNode search(BNode par, String k){
    BNode n = null;

     if (par != null){
        if ((k.compareTo(par.obj.getKey()) < 0) && (par.left != null)){
            search(par.left, k);
        } 

         if ((k.compareTo(par.obj.getKey()) > 0) && (par.right != null)){
            search(par.right, k);
        } 

        if (k.compareTo(par.obj.getKey()) == 0){
          n = par;    
        } 
    }

    return n;

}

public AnyClass searchBST(String k){
    if (search(root, k) != null)
    return search(root, k).obj; 

    return null;
}

共有1个答案

蒋泰
2023-03-14

我想你漏掉了一些返回语句:

public BNode search(BNode par, String k){
    BNode n = null;

     if (par != null){
        if ((k.compareTo(par.obj.getKey()) < 0) && (par.left != null)){
            return search(par.left, k);
        } 

         if ((k.compareTo(par.obj.getKey()) > 0) && (par.right != null)){
           return search(par.right, k);
        } 

        if (k.compareTo(par.obj.getKey()) == 0){
          n = par;    
        } 
    }

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

  • 编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。 例如,对于以下树: N1(值:1,左:null,右:null) n2(值:2,左:n1,右:n3) N3(值:3,左:null,右:null) 对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。 函数应该返回1,然而,它返回0或者根本不返回。

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

  • 代码看起来很好,但是总是bst没有值并且总是显示为空,并且root是null!!!

  • 在二元搜索树的情况下,为什么我们不能简单地在一个节点有两个子节点的情况下,将一个节点的前一个节点替换为后一个节点?

  • 我必须编写一个二进制搜索树的实现,它可以处理库的库存。它读取一个包含所有书籍的文本文件,并将这些书籍按字母顺序添加到树中。我已经与Insertar()函数代码斗争了几天,但我无法使它正常工作,它基本上接收到一个指针,指向与书相关的所有数据的树根。如果根为NULL,则它将函数中输入的所有值初始化一个节点,并将内存方向指定为NULL节点。问题是,它在本地做,最终它没有分配它。谁能帮我纠正那个具体的功能