有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用二进制搜索树搜索同名电影

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

共 (1) 个答案

  1. # 1 楼答案

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

    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());
        }
    }
    

    在得到最左边的节点后,只需一直向右,直到电影的标题不相等

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