En el árbol de búsqueda binario (BST), siempre que el elemento exista en el árbol, definitivamente se podrá buscar en algún lugar a lo largo de la ruta desde el nodo raíz hacia abajo a todos los nodos hoja. Esto es lo que necesitamos descubrir.
Como sabemos que el árbol dado es un BST, podemos usar DFS (búsqueda de profundidad primero) o BFS (búsqueda de respiración primero) para determinar qué nodos seguir a continuación hasta que veamos el nodo con el elemento deseado. Debido a que todos los nodos en un BST deben satisfacer la condición de tener un nodo secundario izquierdo con un valor menor (datos) y un nodo secundario derecho con un valor mayor (datos).
Luego, depende de cómo el BST contiene sus nodos hijos, si se extiende ampliamente (cerca del árbol completo O completo, que tiene el número máximo de nodos para cada nivel / profundidad), entonces podemos usar BFS para encontrar el elemento dado. BFS se puede implementar usando una (1) estructura de datos de cola o (2) usando LinkedList + HashSet.
- ¿Cuáles son algunos problemas del mundo real que podrían resolverse con la programación / codificación?
- Cómo resolver http://www.spoj.com/problems/SAMER08A/ usando el algoritmo de Dijkstra
- ¿Es razonable delegar decisiones importantes sobre algoritmos?
- ¿Cómo se puede calcular su edad en días? Necesito el algoritmo más simplificado para resolverlo.
- Cómo ordenar una lista anidada en Python
Con (1), la idea es seguir agregando los nodos secundarios izquierdo y derecho a una cola, cada vez que terminemos de verificar el nodo actual para ver si es el nodo deseado. Luego, cada vez que retiramos un nodo, repetimos el paso anterior nuevamente para atravesar el árbol. Debe estar en orden de primero en entrar, primero en salir.
Con (2), podemos usar un LinkedList para mantener el nodo que hemos atravesado hasta ahora, y luego usar un HashSet para verificar si el nodo ha sido “visitado” hasta ahora. Tenga en cuenta que queremos usar un HashSet para beneficiar la accesibilidad de tiempo O (1) cuando intentamos buscar cualquier nodo.
Además de BFS, si el BST es “alto” o “profundo”, que parece una larga lista de nodos, entonces DFS es definitivamente el candidato, ya que queremos atravesar el árbol (a la izquierda) hasta llegar al nivel inferior en lugar de todos los nodos en cada nivel. Este recorrido transversal del árbol es similar al algoritmo transversal de preorden. La implementación de DFS se puede hacer usando (1) estructura de datos de pila, o (2) recursividad.
Con (1), debe ser el último en entrar, primero en salir, ya que queremos ir tan lejos como podamos hacia abajo hasta el nivel inferior, luego volver a subir.
Con (2), la recursividad debe ser similar al algoritmo transversal de preorden.
Espero que esto te dé una mejor idea del problema.
Buena suerte.