Древовидная структура данных

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

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

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

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

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

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам