Personalmente, creo que la mejor manera de hacer esto sería ir a un árbol de búsqueda binario aleatorio como un Treap . Esto no garantiza absolutamente que el árbol será equilibrado, pero con alta probabilidad de que el árbol tendrá un buen factor de equilibrio. Un Treap funciona mediante el aumento de cada elemento del árbol con un número uniformemente aleatorio, a continuación, asegurar que el árbol es un árbol binario de búsqueda con respecto a las claves y un montón con respecto a los valores aleatorios uniformes. La inserción en un Treap es muy fácil:
- Elegir un número aleatorio para asignar al elemento recién añadido.
- Insertar el elemento en el BST usando inserción BST estándar.
- Mientras que la clave del elemento recién insertado es mayor que la clave de su matriz, realice una rotación del árbol de traer el nuevo elemento por encima de su padre.
Ese último paso es el único realmente duro, pero si tuviera algo de tiempo para trabajar hacia fuera en una pizarra Estoy bastante seguro de que se puede aplicar esto en la marcha en una entrevista.
Otra opción que podría funcionar sería el uso de un árbol biselado . Es otro tipo de BST rápido que se pueden implementar suponiendo que tiene una función de inserción estándar BST y la capacidad de hacer rotación de árboles. Es importante destacar que, árbol biselado son extremadamente rápido en la práctica, y se sabe que son (dentro de un factor constante) al menos tan bueno como cualquier otro árbol de búsqueda binaria estática.
Dependiendo de lo que se entiende por "árbol de búsqueda," también se podría considerar el almacenamiento de los números enteros en una estructura optimizada para la búsqueda de los números enteros. Por ejemplo, se puede utilizar un trie bit a bit para almacenar los números enteros, que apoya las operaciones de búsqueda en un tiempo proporcional al número de bits por palabra máquina. Esto se puede implementar bastante bien utilizando una función recursiva para mirar por encima de los bits, y no requiere de ningún tipo de rotaciones. Si usted necesita para arruinar a cabo una implementación en un cuarto de hora, y si el entrevistador le permite desviarse de los árboles binarios de búsqueda estándar, entonces esto podría ser una gran solución.
¡Espero que esto ayude!