2009-08-27 6 views
1

Je suis à la recherche d'une implantation d'arbre ... vous pouvez voir le moi previous question here. mais je ne voudrais pas mettre en œuvre moi-même,Structure de données d'arbre

fonctionnalités exemple nécessaires:

  • J'ai besoin findElement (node)
  • J'ai besoin GetParent (noeud) - fera le retrouver
  • GetSubTreeFrom (noeud) - trouveront l'élément et retourner un sous-arbre ..

Je sais C5 - mais tous les arbres il y a rouge-noir (et je ne veux pas qu'il soit commandé) J'ai essayé Powercollection n'a pas trouvé l'arbre ...

Je ne suis pas sûr mais peut-être Set ou Hash peut faire le travail.

toute aide serait appréciée.

Répondre

0

Eh bien, un arbre non ordonné n'est généralement pas bon pour quoi que ce soit. La recherche devient alors une opération O (n), qui va à l'encontre de l'objectif initial d'utiliser un arbre pour commencer. Peut-être que ce dont vous avez besoin est un arbre d'arbres (d'arbres d'arbres ....). Chaque niveau dans le répertoire peut être son propre arbre. Les sous-catégories peuvent être un sous-arbre du noeud de la catégorie parente.

Je n'y ai pas très bien réfléchi, mais avec cela vous pouvez utiliser des structures de données standard plutôt que d'écrire les vôtres.

0

Vous pouvez mettre en œuvre ce que vous voulez comme ceci:

class Category 
{ 
    ArrayList Next; 
    string name; 

    public Category() 
    { 
     name = ""; 
     Next = new ArrayList(); 
    } 

    public Category(string name) 
    { 
     this.name = name; 
     Next = new ArrayList(); 
    } 

    public void Add(string name) 
    { 
     Next.Add(new Category(name)); 
    } 

    public Category Find(string name) 
    { 
     Category a; 
     foreach (Category c in Next) 
     { 
      if (c.name == name) 
       return c; 
      a = c.Find(name); 
      if (a != null) return a; 
     } 
     return null; 
    } 
    // other functions you need 
} 

Et l'utiliser comme ceci:

Category c = new Category(); 
c.Add("books"); 
Category a; 
a = c.Find("books"); 
a.Add("SF"); 
a.Add("drama"); 
if (c.Find("SF") != null) 
    Console.WriteLine("found SF"); 
if (c.Find("other") == null) 
    Console.WriteLine("did not find other"); 
Questions connexes