Saltar al contenido

Java – estructura de datos de árbol con múltiples nodos – cómo buscar de manera eficiente

Solución:

Hasta ahora, no conozco ninguna estructura de datos incorporada de Java que pueda manejar lo que está buscando. Hay algunas implementaciones de árbol en github o este hilo en stackoverflow te ayudará. Pero si te entendí bien, también estás interesado en tener una buena búsqueda en tu árbol. Ordenar el árbol no resuelve completamente este problema, porque aún tiene que buscar en cada subárbol. Aunque podría mejorar significativamente el rendimiento de búsqueda. Pero hasta donde yo sé, no hay una estructura de datos lista para usar en Java.

Otro enfoque que me vino a la mente es utilizar un mapa con tu label y una referencia al acuerdo Node. Sin embargo, necesitaría un árbol en el que pueda ir desde las hojas hasta el nodo raíz para obtener la ruta completa y debe ocuparse de la información duplicada. Por ejemplo, si elimina un nodo, también debe eliminarlo en el mapa. Si también desea recorrer el árbol desde la raíz, puede construir un árbol bidireccional.

Así es como se vería mi enfoque:

class Node {
    String label;
    Node parent;
}

class Tree {
    HashMap<String, List<Node>> tree;
}

Es un List<Node> si tiene varias veces el mismo nombre de etiqueta. Por ejemplo, si tienes necklaces a jewlery y summer collection

Necesitas dos cosas para esto:

En su objeto Node, tenga una referencia al nodo principal también:

class Node{
    String label;
    List<Node> children;
    Node parent;
}

Cree un HashMap que asigne etiquetas a los nodos:

HashMap<String, Node> labelsToNodes;

Luego, la búsqueda se realiza con el método get () en HashMap. Obtiene su lista de categorías al obtener repetidamente los nodos principales. Avíseme si desea el código para esto y lo agregaré (tengo poco tiempo en este momento).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *