搜索在java中的二进制搜索树

时间:2015-03-30 03:23:35

标签: java search insert binary-search-tree

我正在尝试创建一个能够插入给定数字的BST程序,然后通过说出true或false来告诉用户该号码是否在BST中。但是,即使插入了数字,它也始终注册为false。谁能告诉我这里哪里出错了?如果需要,我可以提供其余的类文件。

public class BinarySearchTree implements BST
{
private int n;
private Node r;
private Node l;

public void enter(int num)
{
    Node node = new Node(num);

    if (num < node.getData())
    {
        if (node.getL() != null)
        {
            insert(num);
        }

        else
        {
            node.setL(new Node(num));
        }
    }

    else if (num > node.getData())
    {
        if (node.getR() != null)
        {
            insert(num);
        }

        else
        {
            node.setR(new Node(num));
        }
    }
}

public boolean search (int num)
{
    if (num == this.n)
    {
        return true;
    }

    else if (num > this.n)
    {
        if (r == null)
        {
            return false;
        }

        else
        {
            return true;
        }
    }
    else if (num < this.n)
    {
        if (l == null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    return false;
}
}

3 个答案:

答案 0 :(得分:0)

        insert(num);

向左和向右,是否插入()检查是否必须再次向左或向右移动?

node

已使用但未在任何地方声明。

你希望得到这个想法,发布整个事情。

此外,虽然你的问题是假的。你的代码更经常地返回true方式(并且技术上不应该返回true,因为num&gt; this.n并且我们得到了一个正确的OR左)。所以你的第一个问题是你的树的构建,这对你来说是错误的,一旦你修复它,修复搜索。

答案 1 :(得分:0)

如果这不是同事或类似的东西: 使用实现红黑树的TreeSet

Set<Number> numbers = new TreeSet<Number>();
numbers.add(...);

if (numbers.contains(...)) {
  ...
}

答案 2 :(得分:0)

  1. 在BST类中,可以保留搜索和插入函数以及一个根节点。您还将节点内部变量保留在BST中,坦率地说,令人困惑。
    2。如果在插入函数中添加null-check,则不需要其他输入函数。
    3。您的搜索功能也完全错误,因为您只在第一级检查是否相等。您必须在左侧和右侧递归执行此操作,直到找到密钥或用完节点。