/**
 *  Main file for BST Lab
 *  @author Alyce Brady
 *  Creation Date: 4 November 2025
 *
 */
public class BSTLab
{
    public static void main(String args[])
    {
        // Construct several trees for testing purposes: one will stay
        // empty, one will have a single data element, and one will have
        // multiple data items.  (All start out empty, though.)
        K_BinaryTree<Integer> emptyBST = new K_BST<>();
        K_BinaryTree<Integer> singleNodeBST = new K_BST<>();
        K_BinaryTree<Integer> biggerBST = new K_BST<>();

        // Construct a print visitor to use with any style of traversal.
        NodeVisitor<Integer> printer = new PrintAction<>();

        // Add one data item to singleNodeBST.
        singleNodeBST.add(100);

        // Add multiple elements to biggerBST.
        biggerBST.add(50); // Root
        biggerBST.add(30); // Left of 50
        biggerBST.add(70); // Right of 50
        biggerBST.add(20); // Left of 30
        biggerBST.add(40); // Right of 30
        biggerBST.add(60); // Left of 70
        biggerBST.add(80); // Right of 70
        biggerBST.add(70); // Duplicate, goes right of 70, left of 80
        biggerBST.add(10); // Left of 20 (Deepest path: 50, 30, 20, 10)

        // Print the height of an empty tree, a single-node tree, and a
        // non-empty tree (the bigger tree constructed above).
        System.out.println("Height of an empty BST: " +
                emptyBST.height() + "  (Expected: 0)");
        System.out.println("Height of a single-node BST: " +
                singleNodeBST.height() + "  (Expected: 1)");
        System.out.println("Height of the bigger BST: " +
                biggerBST.height() + "  (Expected: 4)");
        System.out.println();

        // Print the values in the bigger tree.
        System.out.println("******Breadth-First Traversal******");
        System.out.println("Expected: 50, 30, 70, 20, 40, 60, 80, 10, 70 (on separate lines)");
        biggerBST.breadthFirstTraversal(printer);
        System.out.println();
        System.out.println("******In-Order Traversal******");
        System.out.println("Expected: 10, 20, 30, 40, 50, 60, 70, 70, 80 (on separate lines)");
        biggerBST.inOrderTraversal(printer);
        System.out.println();

/*
        // Remove an item from the bigger tree.  Print the modified tree.
        System.out.println("Remove 20.");
        biggerBST.remove(20);
        System.out.println();
        System.out.println("******Breadth-First Traversal******");
        System.out.println("Expected: 50, 30, 70, 10, 40, 60, 80, 70");
        biggerBST.breadthFirstTraversal(printer);
        System.out.println();
        System.out.println("******In-Order Traversal******");
        System.out.println("Expected: 10, 30, 40, 50, 60, 70, 70, 80");
        biggerBST.inOrderTraversal(printer);
        System.out.println();
*/

    }

}    //end class BSTLab
