Я пытаюсь построить дерево строк, но мне кажется, что я сталкиваюсь с несколькими проблемами, которые я не знаю, как исправить.
public static TreeNode buildTree(TreeNode t, String s)
{
int size = s.length();
while(size > 0)
{
String current = s.substring(0,1);
insert(t, current);
s = s.substring(1);
size--;
}
System.out.println("This is the tree:");
System.out.println(t);
return t;
}
/**************************
Recursive algorithm to build a BST: if the node is null, insert the
new node. Else, if the item is less, set the left node and recur to
the left. Else, if the item is greater, set the right node and recur
to the right.
*****************************/
private static TreeNode insert(TreeNode t, String s)
{
if(t == null)
{
t = new TreeNode(s, null, null);
return t;
}
else
{
String s1 = (String) t.getValue();
String s2 = s;
//this line below is problematic
if(s2.compareTo(s1) == -1 || s2.compareTo(s1) == 0) //s2 comes before s1
{
t.setLeft(new TreeNode(s2));
insert(t.getLeft(), s);
}
else
{
t.setRight(new TreeNode(s2));
insert(t.getRight(), s);
}
}
return t;
}
Вот класс TreeNode:
class TreeNode
{
private Object value;
private TreeNode left, right;
public TreeNode(Object initValue)
{
value = initValue;
left = null;
right = null;
}
public TreeNode(Object initValue, TreeNode initLeft, TreeNode initRight)
{
value = initValue;
left = initLeft;
right = initRight;
}
public Object getValue()
{
return value;
}
public TreeNode getLeft()
{
return left;
}
public TreeNode getRight()
{
return right;
}
public void setValue(Object theNewValue)
{
value = theNewValue;
}
public void setLeft(TreeNode theNewLeft)
{
left = theNewLeft;
}
public void setRight(TreeNode theNewRight)
{
right = theNewRight;
}
}
Когда я вызываю метод вставки из метода buildTree, и я пытаюсь t = new TreeNode (s); или t = new TreeNode (s, null, null), когда t == null изначально, дерево остается нулевым, когда возвращается в buildTree. Тем не менее, кажется, обновить дерево в методе вставки. Как я мог решить эту проблему?
Кроме того, кажется, что проблема с моими CompareTo в методе вставки, потому что он часто возвращает это:
Исключение в потоке "main" java .lang.StackOverflowError
Любая помощь будет очень признательна, потому что я застрял на этом довольно долгое время!