Нужна помощь с деревьями
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Проблема в следующем. Я никак не могу разобраться с деревьями, причем не бинарными, а с неограниченным количеством детей. Никак не могу найти ни нормальной литературы на эту тему, ни хотя бы исходников. Поэтому просьба, если кто знает, где можно почитать на эту тему или, если у кого есть функции добавления, удаления, поиска и обхода - не поленитесь, дайте ссылки и запостите функции. Заранее спасибо.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Я использовал следующие структуры, когда работал с дерьвями с недетермированным количеством дуг:
Таким образом задание дерева можно свести к обычному двунаправленному списку его вершин, причём к каждой вершине прикреплён двунаправленный список из дуг, исходящих их этой вершины. Такое представление удобно ещё и тем, что вершины дерева можно обходить не только от корня к листьям (рекурсивно), но и линейным циклом.
Очень советую: хорошие показатели производительности.
Код: Выделить всё
struct CEdge;
struct CVertex;
struct CEdge
{
<..> some data
CVertex *pDest;
CEdge *pNext;
CEdge *pPrev;
};
struct CVertex
{
<..> some data
CEdge *pEdges;
CVertex *pNext;
CVertex *pPrev;
};
Очень советую: хорошие показатели производительности.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.