2010-04-04 8 views
0

Je veux faire un BST générique, qui peut être composé de n'importe quel type de données, mais je ne suis pas sûr de savoir comment ajouter des choses à l'arbre, si mon BST est générique. Tout mon code nécessaire est ci-dessous. Je veux que mon BST soit composé de Locations et trié par la variable x. Toute aide est appréciée.Arbre de recherche binaire en Java

Un grand merci pour la recherche.

public void add(E element) 
{ 
    if (root == null) 
     root = element; 
    if (element < root) 
     add(element, root.leftChild); 
    if (element > root) 
     add(element, root.rightChild); 
    else 
     System.out.println("Element Already Exists"); 
} 

private void add(E element, E currLoc) 
{ 
    if (currLoc == null) 
     currLoc = element; 
    if (element < root) 
     add(element, currLoc.leftChild); 
    if (element > root) 
     add(element, currLoc.rightChild); 
    else 
     System.out.println("Element Already Exists); 
} 

Autre code

public class BinaryNode<E> 
{ 
    E BinaryNode; 
    BinaryNode nextBinaryNode; 
    BinaryNode prevBinaryNode; 

    public BinaryNode() 
    { 
     BinaryNode = null; 
     nextBinaryNode = null; 
     prevBinaryNode = null; 
    } 

} 


public class Location<AnyType> extends BinaryNode 
{ 
    String name; 
    int x,y; 

    public Location() 
    { 
     name = null; 
     x = 0; 
     y = 0; 
    } 

    public Location(String newName, int xCord, int yCord) 
    { 
     name = newName; 
     x = xCord; 
     y = yCord; 
    } 

    public int equals(Location otherScene) 
    { 
     return name.compareToIgnoreCase(otherScene.name); 
    } 


} 
+0

Cela ressemble à des devoirs pour moi. – Avitus

+2

Que diriez-vous de ceci (java.util.Collections.binarySearch (Liste >, T)) pour l'inspiration? – Adi

Répondre

6

Vous pouvez limiter votre type à mettre en œuvre Comparable<? super E>:

public class BinarySearchTree<E extends Comparable<? super E>> 

Ensuite, vous pouvez appeler compareTo:

// Instead of if (element < root) 
if (element.compareTo(root) < 0) 

(etc)

Vous pouvez également forcer l'appelant à passer un Comparator<E> lors de la construction de l'arborescence de recherche, puis l'utiliser pour comparer des éléments. C'est en fait une solution plus flexible selon moi - cela signifie que vous pouvez créer différents arbres de recherche binaires pour le même type d'élément, mais en les ordonnant de différentes manières.