Tengo una BST que tiene entradas duplicadas. Estoy tratando de encontrar entradas duplicadas. Ahora, obviamente, puedo escribir un algoritmo tonto que atraviesa todo el árbol, lo cual es fácil.Estrategia para encontrar entradas duplicadas en un árbol de búsqueda binaria
Sin embargo, quiero escribir uno más eficiente. Esto es lo que he hecho/pensado hasta ahora:
Supongamos el siguiente árbol.
10
/ \
5 15
/\ /\
2 8 10 16
\ \
8 12
Si quiero encontrar toda de 8, voy a encontrar primero el 8 en el subárbol izquierdo de la 10. Para obtener un duplicado, si no tiene un hijo derecho, es que va a ser la más a la izquierda nodo en el subárbol derecho del primer padre que es más grande que ese nodo (8)? Y si tenía un hijo correcto, ¿puede estar en el nodo más a la izquierda de su subárbol derecho o en el nodo más a la derecha en su subárbol izquierdo?
¿Son esos todos los casos, que se pueden lograr con un montón de bucles y declaraciones if?
Si no, ¿cuál es el mejor enfoque? ¿Alguien puede ayudar?
Gracias
EDIT: En realidad me di cuenta de que no puede ser el "nodo más a la izquierda" o "derecha nodo más". Eso encontraría el nodo que es el siguiente valor más alto o el valor más bajo anterior. ¿Sería un nodo antes?
EDIT 2:
fijo mi ejemplo BST. De ello se desprende el siguiente método de inserción:
if (node == null)
return new NodeBST<Value>(name, value);
if (node.key().compareTo(name) > 0)
node.setLeft(insert(node.left(), name, value));
else
node.setRight(insert(node.right(), name, value));
Esto significa duplicados se añadirán a la derecha de sus duplicados .. ¿verdad?
USTED sabe de antemano qué número que está buscando? – lynks
¿Esto no derrota el propósito de una BST? – Jasoneer
Eso no es una BST adecuada. No puede tener 8 en la rama derecha de la raíz 10. –