1

我正在寻找一个树实现......你可以在这里看到我之前的问题。但我不想自己实现它,

所需的示例功能:

  • 我需要 FindElement(node)
  • 我需要 GetParent(node) - 将再次查找
  • GetSubTreeFrom(node) - 将找到元素并返回一个子树..

我知道 C5 - 但是那里的所有树都是红黑的(我不希望它被订购)我试过 Powercollection 没有找到 Tree...

我不确定,但也许 Set 或 Hash 可以完成这项工作。

任何帮助,将不胜感激。

4

2 回答 2

0

好吧,一般来说,无序树对任何事情都没有多大好处。搜索,然后变成了一个 O(n) 操作,违背了使用树开始的整个目的。

也许你需要的是一棵树(树的树......)。目录中的每一层都可以是它自己的树。子类别可以是父类别节点的子树成员。

我还没有很好地考虑这一点,但是有了它,您可以使用现成的数据结构而不是编写自己的数据结构。

于 2009-08-27T07:18:30.457 回答
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");
于 2009-08-27T07:50:06.617 回答