I’m getting this error, here is the necessary code. Assume the methods not here work correctly. Any help would be awesome. (I am coding on a text file in Ubuntu btw)
Here is the error message: (after compiling)
BinarySearchTree.java:132: error: incompatible types: int cannot be converted to T insert(y); ^ where T is a type-variable: T extends Comparable<? super T> declared in class BinarySearchTree Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error
Verbose error message:
BinarySearchTree.java:132: error: no suitable method found for insert(int) insert(y); ^ method BinarySearchTree.insert(T) is not applicable (argument mismatch; int cannot be converted to T) method BinarySearchTree.insert(T,BinaryNode) is not applicable (actual and formal argument lists differ in length) where T is a type-variable: T extends Comparable<? super T> declared in class BinarySearchTree 1 error
Here is my code:
import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; public class BinarySearchTree<T extends java.lang.Comparable<? super T>> { private static class BinaryNode<T> { private T element; // The data in the node private BinaryNode<T> left; // Left child private BinaryNode<T> right; // Right child // Constructors BinaryNode( T theElement ) { this( theElement, null, null ); } BinaryNode( T theElement, BinaryNode<T> lt, BinaryNode<T> rt ) { element = theElement; left = lt; right = rt; } } private BinaryNode<T> root; //root node of the tree // Constructor public BinarySearchTree( ) { root = null; } /*************************************************** * FUNCTION isEmpty: isEmpty * * checks if the tree is empty * * INPUT PARAMETERS: none * * none * * OUTPUT: boolean * * true if the tree is empty, false otherwise * ****************************************************/ public boolean isEmpty( ) { return root == null; } private BinaryNode<T> findMin( BinaryNode<T> t ) { if( t == null ) return null; else if( t.left == null ) return t; return findMin( t.left ); } /*************************************************** * FUNCTION insert: insert * * inserts an item into the tree * * INPUT PARAMETERS: x * * x - the item to be added to the BST * * OUTPUT: none * * none * ****************************************************/ public void insert( T x ) { root = insert( x, root ); } /*************************************************** * FUNCTION insert: insert helper method * * inserts an item into the tree * * INPUT PARAMETERS: x, t * * x - the item to be added to the BST, subtree to be inserted in * * OUTPUT: BinaryNode<T> * * node to be set * ****************************************************/ public BinaryNode<T> insert( T x, BinaryNode<T> t ) { if( t == null ) return new BinaryNode<T>( x, null, null ); int compareResult = x.compareTo( t.element ); if( compareResult < 0 ) { t.left = insert( x, t.left ); } else if( compareResult > 0 ) { t.right = insert( x, t.right ); } else ; // Duplicate; do nothing return t; } /*************************************************** * FUNCTION insertList: Option 1 * * parses a string and insert the values contained in it * * INPUT PARAMETERS: csv * * csv - comma seperated list of integers * * OUTPUT: none * * none * ****************************************************/ public void insertList(String csv) { String[] inputValues = csv.split(",") ; // Numbers are seperated by comma as instructed for (String x : inputValues) { int y = Integer.parseInt(x); insert(y); } } }
Advertisement
Answer
You have a generic parameter so it will be logically correct for you to create a new tree when reading CSV.
This also means insertList(...)
should become static and now be invoked like
BinarySearchTree<Integer> tree = BinarySearchTree.insertList(...)
Here is the code:
public static void insertList(String csv) { String[] inputValues = csv.split(",") ; // Numbers are seperated by comma as instructed BinarySearchTree<Integer> tree = new BinarySearchTree<>(); for (String x : inputValues) { int y = Integer.parseInt(x); tree.insert(y); } }