binary tree toString() method
im writing an expression tree for my comp sci class and everything works except the part i coppied directly out of the book.
public String toString()
{
return toString(root, 0);
}
private String toString(Node<String> tree, int level)
{
String str="";
if(tree!=null)
{
str+= toString(tree.right, level+1);
for(int i=1; i<=level; i++)
str=str+"|";
str+=tree.value.toString()+"\n";
str+=toString(tree.left, level+1);
}
return str;
}
this is the to string method that should print the tree like this:
| | x
| x |
| | x
x | |
| | x
| x |
| | x
but the computer doesnt like it when i compile it.
LinkedBSTPT.java:90: toString() in LinkedBSTPT cannot override toString() in
java.lang.Object; attempting to use incompatible return type
found: String
required: java.lang.String
public String toString()
^
LinkedBSTPT.java:96: incompatible types
found: java.lang.String
required: String
String str="";
^
LinkedBSTPT.java:99: operator + cannot be applied to String,String
str+= toString(tree.right, level+1);
^
LinkedBSTPT.java:101: incompatible types
found: java.lang.String
required: String
str=str+"|";
^
LinkedBSTPT.java:102: incompatible types
found: String
required: java.lang.String
str+=tree.value.toString()+"\n";
^
LinkedBSTPT.java:103: operator + cannot be applied to String,String
str+=toString(tree.left, level+1);
^
these are the errors it give me. some one please explain to me why the computer doesnt like this chunk of code!
> LinkedBSTPT.java:90: toString() in LinkedBSTPT cannot override toString() in
> java.lang.Object; attempting to use incompatible return type
> found : String
> required: java.lang.String
> public String toString()
Found String but requires java.lang.String? That can mean only one thing:
you have defined a class and named it String. I suggest you either get
rid of this class or rename it to something like MyString. Giving your classes the
same name as common API classes is asking for headaches.
import java.util.*;
import java.io.*;
import java.lang.String;
public class LinkedBSTPT<String extends Comparable><String>> implements BSTPT<String>
{
private Node<String> root;
private Node<String> temp;
private int size;
public LinkedBSTPT()
{
root=null;
size=0;
}
public List<String> inorderTraverse()
{
List<String> list = new ArrayList<String>();
inorderTraverse(root, list);
return list;
}
private void inorderTraverse(Node<String> tree, List<String> list)
{
if(tree!= null)
{
inorderTraverse(tree.left, list);
list.add(tree.value);
inorderTraverse(tree.right, list);
}
}
public Iterator<String> iterator()
{
return inorderTraverse().iterator();
}
public int size()
{
return 1;
}
public boolean isEmpty()
{
return false;
}
public String contains(String element)
{
return contains(root, element);
}
private String contains(Node<String> tree, String element)
{
if(tree==null)
return null;
else
{
int relation = element.compareTo(tree.value);
if(relation==0)
return tree.value;
else if(relation<0)
return contains(tree.left, element);
else
return contains(tree.right, element);
}
}
public String add(String element)
{
Node<String> newNode = new Node<String>(element);
if(root==null)
{
root=newNode;
size++;
temp=root;
return null;
}
else
{
if(temp.right==null)
temp.right=newNode;
else
{
if(temp.left==null)
{
temp.left=newNode;
temp=temp.left;
}
}
return temp.value;
}
}
/*public String toString()
{
return toString(root, 0);
}
private String toString(Node<String> tree, int level)
{
String str = "";
if(tree != null)
{
str += toString(tree.right(), level+1);
for(int i = 1; i <= level; i++)
str = str + "|";
str += tree.value().toString() + "\n";
str += toString(tree.left(), level + 1);
}
return str;
}
*/
private class Node<String>
{
private String value;
private Node<String> left, right;
private Node(String v)
{
this(null,v,null);
}
private Node(Node<String> l, String v, Node<String> r)
{
left = l;
value = v;
right = r;
}
public Node left()
{
return this.left;
}
public Node right()
{
return this.right;
}
public String value()
{
return this.value;
}
}
}
here is my code for the linkedBinary tree class for reference
> thats in there
> the code is just
> public class LinkedBSTPT<String extends
> Comparable<String>> implements BSTPT<String>
I don't know what "thats in there" means. Do you want to do this?
public class LinkedBSTPT <T extends Comparable >< T > > implements BSTPT < T > {
Then change certain Strings in the code to T.
Do you see what you are doing wrong? You chose String for a generic type. Confusion!