Древовидная структура данных - PullRequest
1 голос
/ 27 августа 2009

Я ищу реализацию дерева ... Вы можете увидеть предыдущий вопрос me здесь . но я не хотел бы реализовать это сам,

пример необходимых функций:

  • Мне нужен FindElement (узел)
  • Мне нужен GetParent (узел) - снова выполню поиск
  • GetSubTreeFrom (узел) - найдет элемент и вернет поддерево.

Я знаю C5 - но все деревья там красно-черные (и я не хочу, чтобы их заказывали) Я пробовал Powercollection не нашел Tree ...

Я не уверен, но, возможно, Сет или Хэш могут сделать эту работу.

любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 27 августа 2009

Вы можете реализовать то, что вы хотите, как это:

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");
0 голосов
/ 27 августа 2009

Ну, в общем, неупорядоченное дерево ни на что не годится. Поиск, затем становится операцией O (n), отказываясь от цели использования дерева для начала.

Может быть, вам нужно дерево деревьев (деревьев ...). Каждый уровень в каталоге может быть своим собственным деревом. Подкатегории могут быть членами поддерева узла родительской категории.

Я не очень хорошо продумал это, но с его помощью вы можете использовать готовые структуры данных вместо написания своих собственных.

...