A modo de recordatorio de árboles binarios:
Recorrido de árboles binarios:
Preorden: (raíz, izquierdo, derecho). Para recorrer un árbol binario no vacío en preorden, hay que realizar las siguientes operaciones recursivamente en cada nodo, comenzando con el nodo de raíz:
Visite la raíz
Atraviese el sub-árbol izquierdo
Atraviese el sub-árbol derecho
Inorden: (izquierdo, raíz, derecho). Para recorrer un árbol binario no vacío en inorden (simétrico), hay que realizar las siguientes operaciones recursivamente en cada nodo:
Atraviese el sub-árbol izquierdo
Visite la raíz
Atraviese el sub-árbol derecho
Postorden: (izquierdo, derecho, raíz). Para recorrer un árbol binario no vacío en postorden, hay que realizar las siguientes operaciones recursivamente en cada nodo:
Atraviese el sub-árbol izquierdo
Atraviese el sub-árbol derecho
Visite la raíz
Si hacemos una prueba con el árbol de enteros con el código que tú has puesto obtenemos por ejemplo lo siguiente:
Insertando los siguientes valores:
69 49 92 29 69 27 51 68 11 37
Recorrido preorden
69 49 29 27 11 37 51 68 92
Recorrido inorden
11 27 29 37 49 51 68 69 92
Recorrido posorden
11 27 37 29 68 51 49 92 69
El dibujo del árbol sería como éste:
69
49 92
29 51
27 37
11
El único problema que he detectado en el árbol de enteros por el momento es que si tienes que insertar un valor que ya existía previamente no se inserta. Por eso en la serie anterior del ejemplo aparecen 10 valores como insertados pero sólo 9 valores en los recorridos. Si quisieras corregir esto, tendrías que cambiar alguno de los condicionales para introducir un igual, por ejemplo en vez de if (valorInsertar < datos){ sería if (valorInsertar <= datos){
Para la creación del árbol de enteros estás usando la siguiente estrategia: se crea el nodo raíz con un valor, por ejemplo 69. El siguiente número a insertar se compara con la raíz (69) y si es menor se inserta a la izquierda y si es mayor se inserta a la derecha. En el ejemplo 49 es menor y se inserta a la izquierda. Con el siguiente valor igual, se toma 92 y se compara con la raíz. Por ser mayor se inserta a la derecha. El siguiente valor es 27, se compara con la raíz y por ser menor se inserta a la izquierda. Como el nodo izquierdo ya está ocupado por el 49, se inserta sobre el 49. Se evalúa si es menor o mayor que 49, y por ser menor de 49 se inserta a la izquierda. El siguiente valor es 37. Se compara con la raíz (69) y por ser menor se inserta a la izquierda. Como está ocupado por 49 se compara con 49 y se inserta a la izquierda. Como está ocupado por 29 se compara con 29 y por ser mayor se inserta a la derecha... y así sucesivamente.
La cuestión es que con valores enteros insertas en el árbol basándote en comparaciones de mayor y menor para situar los elementos en un sitio u otro. Con Strings no puedes (o no se le ve sentido) hacer comparaciones mayor - menor, por tanto tienes que elegir otro criterio para realizar la inserción de elementos en el árbol. Puede ser longitud de palabras, orden alfabético, o simplemente crear un árbol balanceado (ir insertando por niveles, primero insertas dos hijos del nodo raíz; luego insertas dos hijos del nodo más a la izquierda y vas insertando nodos hasta que completas un nivel y vuelves a empezar por el siguiente nivel...).
¿Qué criterio es el que quieres usar con Strings?