Использование обхода по порядку для печати объекта внутри дерева двоичного поиска (java) - PullRequest
0 голосов
/ 26 марта 2020

Вопрос. Я создал книжный магазин для тестирования, и у меня возникли проблемы с поиском порядка, чтобы напечатать название, возраст и год книги. Я разместил код для моего бинарного дерева поиска в классе книг и о том, как я вставляю книги в дерево. Приведенный ниже код будет размещать названия книг по порядку (как бы я хотел, чтобы дерево сортировалось), но я не уверен, как получить остальные, чтобы показать.

Класс книги:

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