Construire une structure arborescente à partir de la liste des chemins de chaînes
J'ai une collection de string chemins comme ["x1/x2/x3","x1/x2/x4","x1/x5"] dans la liste.
J'ai besoin de construire une structure arborescente à partir de cette liste, qui peut être itéré jusqu'à obtenir un joli imprimé de l'arbre.
comme ce
x1
|
|-x2
| |
| |-x3
| |
| |-x4
|
|-x5
Toutes les idées/suggestions?
Je crois que le problème peut être attaqué en premier par le traitement de la liste de chaînes de caractères EDIT: La réponse correcte choisi une élégante mise en œuvre, d'autres suggestions ont été trop bonne.
source d'informationauteur sushant
Vous devez vous connecter pour publier un commentaire.
Suivre une implémentation naïve de la mise en œuvre d'un visitables arbre:
interfaces pour les Visiteurs Modèle:
exemple de mise en œuvre pour les Visiteurs Modèle:
et enfin (!!!) un simple cas de test:
de sortie:
Juste diviser chaque chemin par ses séparateur, puis les ajouter à une structure en arbre, un par un.
c'est à dire si
'x1'
n'existe pas de créer ce nœud, s'il n'existe pas d'y aller et vérifier si il y a un enfant'x2'
et ainsi de suite...Je ferais l'arbre, une corde à la fois.
Faire un arbre vide (qui a un nœud racine - je suppose, pourrait être une piste comme "x7/x8/x9").
Prenez la première chaîne, ajoutez x1 vers le nœud racine, alors x2 x1, puis x3 à x2.
Prendre la deuxième chaîne, voir que x1 et x2 sont déjà là, ajouter x4 à x2.
Le faire pour chaque chemin que vous avez.
Créer un Nœud d'Objet qui contient un parent (Nœud) et d'une Liste d'enfants (Nœud).
Première division de la chaîne à l'aide de ",". Pour chaque découpé chaîne de diviser la chaîne à l'aide de "/".
La recherche de la première identificateur de noeud (e.g x1) à la racine de la liste.
Si vous pouvez le trouver, utilisez le nœud de trouver la prochaine identificateur de nœud (par exemple, x2).
Si vous ne pouvez pas trouver un nœud, ajouter le nœud pour le dernier nœud de vous a pu trouver dans les listes existantes.
Après avoir créé la structure de la liste, vous pouvez imprimer la liste à l'écran. Je voudrais faire récursive.
PAS TESTÉ, juste une animation
Faire votre arbre pour chaque chaîne de caractères en tableau.
Juste diviser chemin '/' , vérifiez si le nœud existe dans votre arbre ou pas, si elle existe, puis passer à la suite... sinon créer un nouveau nœud et ajoutez ce nœud dans les enfants du nœud parent.
Itération en utilisant la récursivité.
Suivant est le modèle de l'arbre du nœud.