Вопрос. Я создал книжный магазин для тестирования, и у меня возникли проблемы с поиском порядка, чтобы напечатать название, возраст и год книги. Я разместил код для моего бинарного дерева поиска в классе книг и о том, как я вставляю книги в дерево. Приведенный ниже код будет размещать названия книг по порядку (как бы я хотел, чтобы дерево сортировалось), но я не уверен, как получить остальные, чтобы показать.
Класс книги:
public class Book {
public String bookName;
public double bookCost;
public int bookYear;
public Book(String name, double cost, int year){
bookName = name;
bookCost = cost;
bookYear = year;
}
}
Класс моего узла:
public class BNode {
public String data;
public BNode left;
public BNode right;
public BNode(String data){
this.data = data;
left = right = null;
}
}
Класс BST
public class BinaryTree{
private BNode root;
public void insert(Book d) {
if (root == null) {
root = new BNode(d.bookName);
return;
}
BNode loc = root;
while (true) {
if (d.bookName.compareTo(loc.data) < 0) {
if (loc.left != null) loc = loc.left;
else { loc.left = new BNode(d.bookName); break; }
}
else if (d.bookName.compareTo(loc.data) > 0) {
if (loc.right != null) loc = loc.right;
else { loc.right = new BNode(d.bookName); break; }
}
else break;
}
}
public void inorderTraversal() {
inorderT(root);
}
private void inorderT(BNode t) {
if (t != null) {
inorderT(t.left);
System.out.print(t.data +" ");
inorderT(t.right);
}
}
Мой основной класс:
import java.util.Scanner;
public class BookShop {
public static int getInteger(Scanner sc,String message){
System.out.print(message);
while (!sc.hasNextInt())
{
sc.nextLine();
System.out.print(message);
}
return sc.nextInt();
}
public static double getDouble(Scanner sc,String message){
System.out.print(message);
while (!sc.hasNextDouble())
{
sc.nextLine();
System.out.print(message);
}
return sc.nextDouble();
}
public static void addBooks(BinaryTree bt,Scanner sc){
System.out.println("Welcome to the bookStore ");
String bookName; double bookCost; int bookYear; int quantity;
System.out.print("enter the book's name ('e' to exit): ");
bookName=sc.next();
while (bookName.compareTo("e") != 0)
{
bookCost=getDouble(sc,"enter the book's price:");
bookYear=getInteger(sc,"enter the book's year");
Book b = new Book(bookName, bookCost, bookYear);
quantity=getInteger(sc,"Please enter the quantity in stock:");
bt.insert(b);
System.out.print("enter the name of another book ('e' to exit):");
bookName = sc.next();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BinaryTree bt = new BinaryTree();
addBooks(bt,sc);
bt.inorderTraversal();
System.out.println();
}
}