HARDCORE
Главная
Вход
Регистрация
Вторник, 08.07.2025, 16:21Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [598]
Железо [5]
Статьи об аппаратном обеспечении
Мобильники [7]
Статьи о телефонах и смартфонах
Юмор [24]
Различные юморные статьи на околокомпьютерные темы
Программирование [4]
Различные статьи о программировании
Администрование [16]
Статьи по администрованию
История [16]
как все начиналось...
Hardcore [6]
deface, hack, virus, sekurity, rootkit, и прочее
Security & Hack [4]
Все о взломе и безопасности

Наш опрос
Какая область деятельности вам ближе?
Всего ответов: 239

Главная » Статьи » Мои статьи

Деревья в С
Двоичные деревья

Рассмотрим структуру данных которая называется двоичное дерево. Несмотря на то что бывает много различных типов деревьев двоичные играют особую роль, так как в отсортированном состоянии позволяют очень быстро выполнить вставку, удаление и поиск. Каждый элемент двоичного дерева состоит из информационной части и указателей на левый и правый элементы. Приведем схематичный пример двоичного дерева.


Первый элемент дерева называется корнем (root). Каждый элемент данных называется вершиной дерева (node), а любой фрагмент дерева называется поддеревом (subtree). Вершина к которой не подсоединены поддеревья называется заключительным узлом (terminal node) или листом (leaf). Высота (height) дерева равняеться максимальному количеству уровней от корня до листа. При работе с деревьями можно допустить, что в памяти они существуют в том же виде как на бумаге. Но необходимо помнить, что дерево – всего лишь способ логической организации в памяти, а память линейна.
В некотором смысле Двоичное дерево является особым видом связанного списка. Элементы можно вставлять, удалять и извлекать в любом порядке. Кроме того, опера¬ция извлечения не является разрушающей. Несмотря на то, что деревья легко пред¬ставить в воображении, в теории программирования с ними связан ряд сложных за¬дач. Большинство функций, работающих с деревьями, рекурсивны, поскольку дерево по своей сути является рекурсивной структурой данных. Другими словами, каждое поддерево, в свою очередь, является деревом. Поэтому разрабатываемые здесь функ¬ции будут рекурсивными. Существуют и не рекурсивные версии этих функций, но их код понять намного сложнее.
Способ упорядочивания дерева зависит от того, как к нему впоследствии будет осуществляться доступ. Процесс поочередного доступа к каждой вершине дерева на¬зывается обходом (вершин) дерева (tree traversal).
Существует три порядка обхода дерева: обход симметричным способом, или симметричный обход (inorder), обход в прямом порядке, прямой обход, упорядоченный обход, обход сверху, или обход в ширину (preorder) и обход в обратном порядке, обход в глубину, об¬ратный обход, обход снизу (postorder). При симметричном обходе обрабатывается сна¬чала левое поддерево, затем корень, а затем правое поддерево. При прямом обходе обрабатывается сначала корень, затем левое поддерево, а потом правое. При обходе снизу сначала обрабатывается левое поддерево, затем правое и, наконец корень. Последовательность доступа при каждом методе обхода показана ниже:
Симметричный обход a b с d e f g
Прямой обход d b а с f e g
Обход снизу а с b e g f d



Пример функции создающей двоичное дерево:

struct tree
{ char info;
struct tree *left;
struct tree *right;
};

struct tree *stree(
struct tree *root,
struct tree *r,
char info)
{
if(!r) {
r = (struct tree *) malloc(sizeof(struct tree));
if(!r) {
printf("He хватает памяти\п");
exit(0) ;
}
r->left - NULL;
r->right - NULL;
r->info = info;
if(!root) return r; /* первый вход */
if(info < root->info) root->left = r;
else root->right = r;
return r;
}
if(info < r->info)
stree (r,r->left, info) ;
else
stree(r,r->right,info);
return root;
}

Описанный выше алгоритм просто следует по ссылкам дерева переходя к левой или правой ветви на основании содержимого поля info по достижении места вставки нового элемента.

На основе материала изложенного Гербертом Шилдтом
Категория: Мои статьи | Добавил: hardcore1 (18.07.2007)
Просмотров: 2318 | Рейтинг: 3.5/2 |

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Друзья сайта

Статистика


Copyright MyCorp © 2025