S
Smartie86
Gast
Servus. ich muss einen Binärbaum in Java implementieren und diesen mit Generics mit verschiedenen Schlüsseln kompatibel machen.
Meine Problem ist der obligatorische größer/kleiner-Vergleich beim Einfügen/Löschen eines neuen Knotens.
Bei generischen Schlüsseln ist < und > ja nicht definiert.
Ich habe leider keine Ahnung wie man generische Schlüssel auf Größenunterschiede vergleichen kann :/
Ich hatte alles erstmal als int-Baum ausgelegt um überhaupt mal was machen zu können, und nun weiß ich leider mit den generischen Schlüsseln nicht weiter.
Ich schätze mal, daß man da irgndeine Art von comparator benutzen muss, aber ich hab ehrlich gesagt keine Ahnung davon und werde aus der Java Api dafür nicht ganz schlau
Hilfe
Ich habe noch ein kleines Problem dessen ursache mir nicht ganz klar ist: in der main Klasse bei t.setOrder(Order.Preorder) sagt mir eclipse Order cannot be resolved, aber es ist definitiv in der Baumklasse definiert, ich versteh es nicht
mfg
Smartie
Meine Problem ist der obligatorische größer/kleiner-Vergleich beim Einfügen/Löschen eines neuen Knotens.
Bei generischen Schlüsseln ist < und > ja nicht definiert.
Ich habe leider keine Ahnung wie man generische Schlüssel auf Größenunterschiede vergleichen kann :/
Ich hatte alles erstmal als int-Baum ausgelegt um überhaupt mal was machen zu können, und nun weiß ich leider mit den generischen Schlüsseln nicht weiter.
Ich schätze mal, daß man da irgndeine Art von comparator benutzen muss, aber ich hab ehrlich gesagt keine Ahnung davon und werde aus der Java Api dafür nicht ganz schlau
Hilfe
Code:
// Meine Knotenklasse
public class Node<E>
{
Node<E> left;
Node<E> right;
Node<E> parent;
E value;
public Node (E val, Node<E> parent)
{
left = right = null;
this.parent = parent;
}
public E getValue()
{
return value;
}
}
// Meine Baumklasse
import java.util.*
public class Tree<E> implements Iterable<E>
{
Node<E> root = null;
enum Order {Preorder, Postorder, Inorder};
private Order order = Order.Preorder;
void setOrder (Order x)
{
order = x;
}
.....
public void add(E val)
{
if ( root == null ) root = new Node<E> (val, null ) ;
else add ( root , val ) ;
}
public void add (Node<E> k, E val)
{
if (val < k.value)
{
if (k.left == null) k.left = new Node<E>(val, k);
else add(k.left, val);
}
else
{
if (k.right == null) k.right = new Node<E> (val, k);
else add(k.right, val);
}
}
......
public void delete (E val)
{
delete(root,val);
}
public void delete (Node<E> k, E val)
{
Node<E> right;
Node<E> preRight;
if (k != null)
{
if (k.value == val)
{
if (k.right == null && k.left == null) k = null;
else
{
if (k.left == null) k = k.right;
else
{
if (k.right == null) k = k.left;
else
{
right = k.left;
preRight = null;
while (right.right != null)
{
preRight = right;
right = right.right;
}
if (preRight != null)
{
preRight.right = right.left;
right.left = k.left;
}
right.right = k.right;
k = right;
}
}
}
}
else
{
if (val > k.value)
{
delete(k.right, val);
}
if (val < k.value)
{
delete(k.left, val);
}
}
}
}
}
// meine Main-Klasse
public class TreeMain
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Tree<Integer> t = new Tree<Integer>();
t.setOrder(Order.Preorder);
}
}
Ich habe noch ein kleines Problem dessen ursache mir nicht ganz klar ist: in der main Klasse bei t.setOrder(Order.Preorder) sagt mir eclipse Order cannot be resolved, aber es ist definitiv in der Baumklasse definiert, ich versteh es nicht
mfg
Smartie