traiter les doublons dans un bst

voix
2

Mon bst doit être en mesure de faire face à des entrées en double. Quelqu'un at-il des stratégies sur la façon d'aller à ce qui ne nécessite pas de quantités excessives de code? Je pensais d'ajouter systématiquement en double à droite mais qui gâchera l'ordre bst. par exemple ce qui se passe lorsque le double a deux enfants qui ont à leur tour deux enfants ?. insérer le double est assez facile, mais ce qui doit être fait avec le nœud remplacer?

Créé 10/10/2009 à 08:51
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
2

Vous pouvez faire les nœuds de l'arbre de recherche binaire dans les listes chaînées.

class Data implements Comparable<Data>
{
   // These are the data elements in your binary search tree
}

class TreeNode
{
  TreeNode left; // elements less than current node, or null
  TreeNode right; // elements greater than current node, or null
  List<Data> items = new LinkedList<Data>();    
}

Ici, treeNode.itemsest toujours une liste non vide, de sorte que item1.compareTo(item2) == 0pour chaque item1et item2dans treeNode.items.

Pour insérer un élément en double, vous trouverez le pertinent TreeNodeobjet et ajouter un nouvel élément à items.

La logique de trouver des éléments est presque le même que celui que vous aviez avant, sauf qu'une fois que vous trouverez le correspondant TreeNodeobjet que vous devez marcher sur la liste chaînée.

Créé 10/10/2009 à 13:17
source utilisateur

voix
3

Tant que ce n'est pas une auto équilibrage BST, je ne vois pas de problème avec mettre des nœuds égaux soit à gauche ou à droite du nœud est égal à eux.

Modifier (après la remarque de Simonn):

Si le « nœud double » en question a 2 enfants, puis insérez simplement déjà le « nouveau nœud double » à gauche et laisser l'enfant gauche du « ancien noeud en double » devenir l'enfant gauche du « nouveau nœud en double ».

Permettez-moi de préciser un exemple. L'arbre avant d'insérer un double:

    4'
   / \
  2   5
 / \
1   3

Et maintenant , l'élément 4''est inséré:

      4'
     / \
    4'' 5
   /
  2   
 / \
1   3

Tant que l'arbre est pas l'équilibrage de soi-même, vous devriez être bien.

Créé 10/10/2009 à 13:37
source utilisateur

voix
0

Je me demande si vous avez réellement besoin de stocker les entrées en double en tant que nœuds séparés? Serait l'ajout d'une variable compteur à votre nœud suffisant? De cette façon, si vous traversez l'arbre, vous savez le nombre d'entrées en double et conservent encore l'ordre.

Créé 21/06/2012 à 19:26
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more