Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用二叉搜索树搜索同名电影_Java_Iteration_Binary Search Tree - Fatal编程技术网

Java 使用二叉搜索树搜索同名电影

Java 使用二叉搜索树搜索同名电影,java,iteration,binary-search-tree,Java,Iteration,Binary Search Tree,我有一个项目,我正在工作,涉及制作一个电影数据库。我有一个电影对象,我的问题是打印出同名电影有困难。目前只有一部电影正在印刷。我确信我的BinarySearchTree类中的搜索功能正在工作,因为它正确地找到了它,我认为一旦满足搜索条件,它就会停止,并且它不会寻找任何其他可能具有相同标题的电影。我认为要解决这个问题,我只需要实现一个循环,它将按照遍历BinarySearchTree时找到的方式打印每个电影 这是我在BinarySearchTree中的搜索功能: public Node searc

我有一个项目,我正在工作,涉及制作一个电影数据库。我有一个电影对象,我的问题是打印出同名电影有困难。目前只有一部电影正在印刷。我确信我的
BinarySearchTree
类中的搜索功能正在工作,因为它正确地找到了它,我认为一旦满足搜索条件,它就会停止,并且它不会寻找任何其他可能具有相同标题的电影。我认为要解决这个问题,我只需要实现一个
循环
,它将按照遍历BinarySearchTree时找到的方式打印每个电影

这是我在BinarySearchTree中的搜索功能:

public Node search( Movie m ){
    if ( root == null ){
        System.out.println("No items to search.");
        return null;
    }else{
        return search( m, root );
    }
}
private Node search( Movie m, Node n){
    if ( m.compareTo( n.getData() ) == 0 ){
        if(n.getLeft() != null){//Go left to continue searching
           Node node = search(m, n.getLeft());
           if(node != null)
              return node;
        }
        return n;
    }else{
        if ( n.getRight() == null ){
            System.out.println("Item not found.");
            return null;
        }else{
            return search(m, n.getRight());
        }
    }
}
我的Main中的实现目前只打印出一部同名电影(它遇到的第一部)。我需要一个循环,或者某种方法来不断地在树中迭代

public static BinarySearchTree findByTitle( BinarySearchTree tree ){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the title of the movie: ");
    Movie temp = new Movie( input.nextLine() );

    Node leftMost = tree.search(temp);
    if( leftMost != null ){
           while(leftMost != null && temp.compareTo( leftMost.getData() ) == 0){
                System.out.println(leftMost.getData());
                leftMost = leftMost.getRight();
           }
    }
    return tree;
}

首先,您可以通过修改搜索功能获得最左边的条目:

private Node search( Movie m, Node n){
    if ( m.compareTo( n.getData() ) == 0 ){
        if(n.getLeft() != null){//Go left to continue searching
           Node node = search(m, n.getLeft());
           if(node != null)
              return node;
        }
        return n;
    }
    if ( m.compareTo( n.getData() ) < 0 ){
        if( n.getLeft() == null){
            System.out.println("Item not found.");
            return null;
        }else{
            return search(m, n.getLeft());
        }
    }else{
        if ( n.getRight() == null ){
            System.out.println("Item not found.");
        return null;
    }else{
        return search(m, n.getRight());
    }
}

请告诉我们更多关于
其他可能的同名电影的信息
?所以它们必须是完美的匹配,或者只是有相同的前缀或smt?是的,它们必须只有相同的标题,比如说我有3部电影名为《星球大战》。目前,只有一部《星球大战》将被印刷出来。相同片名的电影还有其他信息,比如不同的演员或发行年份,这使它们与众不同。谢谢你的帮助,我已经用你的建议更新了我的帖子。不幸的是,现在似乎找不到位于树右侧的电影。我不确定现在是否需要修改搜索函数?@JCCS我想你在搜索函数中
m.compareTo(n.getData())<0
时意外删除了该部分,所以把它放回去,它会解决你的问题:)@JCCS抱歉垃圾邮件,但你能描述一下你正在使用的数据结构吗?你提到这是一棵树?是的,它应该是一棵二元搜索树。@JCCS嗯,如果这是一棵二元搜索树,那么向左,向右是不够的,因为我们需要打印后代节点,而不仅仅是右或左节点,。。。实际上,您可以看一看,它是java的内置BST,它支持您的所有需求:)(请尽量避免重新发明轮子)
Node leftMost = search(m);
if(leftMost != null){
   while(leftMost != null && m.compareTo(leftMost.getData()) == 0){
        System.out.println(leftMost.getData());
        leftMost = leftMost.getRight();
   }
}