Консультация № 67924
21.12.2006, 01:45
0.00 руб.
0 2 2
Ранее никогда не работал с деревьями, не могу найти нормальной литературы, прошу вас написать вводную лекцию по представлению деревьев с помошью списков и массивов и как это использовать на практике. Не могу выполнить лабораторную работу. Задание такое:

Сформировать дерево с произвольной степенью исхода узлов, используя массивы и списки, сравнить эффективность их реализации.

Для упрощения работы решил использовать бинарное дерево.
Спасибо.

Обсуждение

Неизвестный
21.12.2006, 02:51
общий
это ответ
Здравствуйте, Басёнов Е.С.!
В теории графов я слышал только про полустепень исхода дерева. Для бинарных деревьев это число равно 2 (т.е. каждый узел имеет два наследника). Так что задачу ты чересчур упростил :). Что касается произвольной полустепени исхода то реализуются они тоже просто. В приложении есть все структуры для этого. Насчет эффективности реализации ничего не скажу, т.к. STL-ные классы vector и list по производительности не отличаются. А литературы по деревьям масса. Начиная от учебников по теории графов и заканчивая Д.Кнутом и Р.Седжвиком.

Приложение:
Бинарное деревоstruct tree_node { T item; tree_node* left; tree_node* right;};template <class T>struct tree { tree_node<T> *root;};Узел дерева с произвольной полустепенью исхода с использованием класса vectortemplate <class T>struct tree_node { T item; vector<tree_node<T> > sub_nodes;};Узел дерева с произвольной полустепенью исхода с использованием класса listtemplate <class T>struct tree_node { T item; list<tree_node<T> > sub_nodes;};
Неизвестный
21.12.2006, 09:48
общий
это ответ
Здравствуйте, Басёнов Е.С.!

От себя добавлю, что чтобы дерево было более практично-применимым (например, чтобы ползать по нему во всех направлениях) нужен ещё указатель "вверх" (на родителя).

Приложение:
struct TTree {// Бинарное дерево (имеет "би" - два указателя на сыновей) unsigned value;// Значение узла дерева TTree* up;// указатель "наверх" TTree* left;// указатель на левого сына TTree* right;// указатель на правого сына}*root, *work;Литературы действительно много. Поэтому совершенно лень писать ещё один учебник...;)Если что нужно - спрашивайте.Успехов!
Форма ответа