Mi BST tiene que ser capaz de hacer frente a las entradas duplicadas. ¿Alguien tiene alguna estrategia sobre cómo hacer esto que no requiera cantidades excesivas de código? Pensé en agregar consistentemente duplicados a la derecha, pero eso arruinaría la primera orden. por ejemplo, ¿qué sucede cuando el duplicado tiene dos hijos que a su vez tienen dos hijos? insertar el duplicado es bastante fácil, pero ¿qué se debe hacer con el nodo que reemplazó?
lidiando con duplicados en un bst
Puede convertir los nodos del árbol de búsqueda binario en listas vinculadas.
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>();
}
En este caso, treeNode.itemses siempre una lista no vacía, de manera que item1.compareTo(item2) == 0para cada item1y item2en treeNode.items.
Para insertar un elemento duplicado, encontrará el TreeNodeobjeto relevante y agregará un nuevo elemento a items.
La lógica de encontrar elementos es casi la misma que tenías antes, excepto que una vez que encuentras el TreeNodeobjeto relevante , tienes que recorrer la lista enlazada.
Siempre que no se trate de una BST auto compensada, no veo ningún problema para colocar nodos iguales a la izquierda o a la derecha del nodo que sea igual a ellos.
Editar (después de la observación de Simonn):
Si el "nodo duplicado" en cuestión ya tiene 2 hijos, simplemente inserte el "nuevo nodo duplicado" a la izquierda y deje que el hijo izquierdo del "antiguo nodo duplicado" se convierta en el hijo izquierdo del "nuevo nodo duplicado".
Déjame aclarar con un ejemplo. El árbol antes de insertar un duplicado:
4'
/ \
2 5
/ \
1 3
Y ahora el elemento 4''está insertado:
4'
/ \
4'' 5
/
2
/ \
1 3
Mientras el árbol no se auto equilibre, deberías estar bien.
Me pregunto si realmente necesita para almacenar las entradas duplicadas como nodos separados? Sería añadir una variable de contador a su Nodo será suficiente? De esta forma si se recorre el árbol que se sabe el número de entradas duplicadas y todavía preservar el orden.













