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

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

237
задан Tim B 9 December 2015 в 02:30
поделиться

5 ответов

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

базовая структура, которую необходимо будет реализовать, будет набором узлов, и здесь является некоторыми опциями запустить Вас. Давайте предположим, что класс Узел является базовым классом всего решения.

, Если необходимо только переместиться вниз по дереву, затем классу Узла нужен Список детей.

, Если необходимо переместиться по дереву, тогда классу Узла нужна ссылка на ее родительский узел.

Сборка метод AddChild, который заботится обо всем minutia этих двух точек и Разное логики, которая должна быть реализована (дочерние пределы, сортируя детей, и т.д.)

146
ответ дан David Boike 23 November 2019 в 03:24
поделиться

Если требуется записать собственное, можно запустить с этого документа с шестью частями, детализирующего эффективное использование структур данных C# 2.0 и как пойти об анализе реализации структур данных в C#. Каждая статья имеет примеры и установщик с образцами, наряду с которыми можно следовать.

Обширное Исследование “An Структур данных Используя C# 2.0” Scott Mitchell

8
ответ дан user7116 23 November 2019 в 03:24
поделиться

Вообще превосходное Библиотека Универсального набора C5 имеет несколько различных основанных на дереве структур данных, включая наборы, сумки и словари. Исходный код доступен, если Вы хотите изучить их детали реализации. (Я использовал наборы C5 в производственном коде с хорошими результатами, хотя я не использовал ни одной из древовидных структур конкретно.)

22
ответ дан McKenzieG1 23 November 2019 в 03:24
поделиться
delegate void TreeVisitor<T>(T nodeData);

class NTree<T>
{
    private T data;
    private LinkedList<NTree<T>> children;

    public NTree(T data)
    {
         this.data = data;
        children = new LinkedList<NTree<T>>();
    }

    public void AddChild(T data)
    {
        children.AddFirst(new NTree<T>(data));
    }

    public NTree<T> GetChild(int i)
    {
        foreach (NTree<T> n in children)
            if (--i == 0)
                return n;
        return null;
    }

    public void Traverse(NTree<T> node, TreeVisitor<T> visitor)
    {
        visitor(node.data);
        foreach (NTree<T> kid in node.children)
            Traverse(kid, visitor);
    }
}

Простая рекурсивная реализация... < 40 строк кода... Нужно просто держать ссылку на корень дерева вне класса, или обернуть его в другой класс, может быть, переименовать в TreeNode??

116
ответ дан 23 November 2019 в 03:24
поделиться

Используйте GetMessageEnumerator2 () так:

MessageEnumerator en = q.GetMessageEnumerator2();

while (en.MoveNext())
{
    if (en.Current.Label == label)
    {
        string body = ((XmlDocument)en.Current.Body).OuterXml;
        en.RemoveCurrent();
        return body;
    }
}
-121--4863386-

В дополнение к уже упомянутым Selenium IDE .

-121--2424878-

См. http://quickgraph.codeplex.com/

QuickGraph предоставляет универсальные направленные/неориентированные структуры и алгоритмы графов для .Net 2,0 и выше. QuickGraph поставляется с такими алгоритмами, как глубина первого поиска, поиск первым дыханием, поиск A *, кратчайший путь, k-кратчайший путь, максимальный поток, минимальное покрывающее дерево, наименьшие общие предки и т.д. QuickGraph поддерживает MSAGL, GLEE и Graphviz для визуализации графиков, сериализации в GraphML и т.д.

10
ответ дан 23 November 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: