我正在制作一个涉及制作电影数据库的项目。我有一个电影对象,我的问题是我在打印出具有相同标题的电影时遇到问题。目前只有一部电影正在打印出来。我确信我的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;
}
答案 0 :(得分:2)
首先,您可以通过修改搜索功能获得最左边的条目:
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();
}
}