2009-08-27 35 views
1

私はツリーの実装を探しています... あなたは私にprevious question hereを見ることができます。 私は、それを自分自身を実装するために必要なツリーのデータ構造

例の機能好きではないだろう:私はGetParent関数(ノード)が必要FindElement(ノード)

  • が必要

    • を - 見つけ、再び
    • を行いますGetSubTreeFrom(ノード) - 要素を見つけて、サブツリーを返します。..

    私はC5を知っている - そこに赤黒(と私はそれを注文する必要はありません)が、すべての木 私はPowercollectionがツリーを見つけられなかったのを試しました...

    私はおそらく設定またはハッシュは仕事をすることができます。

    助けていただければ幸いです。

  • 答えて

    0

    よく順序付けられていないツリーは、一般的に何にもあまり良くありません。検索は、O(n)操作になり、ツリーを使用する目的をすべて破って始めます。

    多分あなたが必要とするものは、木の木です(木の木の....)。ディレクトリ内の各レベルは、独自のツリーにすることができます。サブカテゴリは、親カテゴリノードのサブツリーメンバとすることができる。

    私はこれを非常にうまく考えていませんでしたが、それを使って自分で書くのではなく、シェルフのデータ構造を使うことができます。

    0

    あなたがこのように欲しいものを実現することができます。

    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 
    } 
    

    そして、このような使用のこと:

    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");