КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
While notEOF(F) do
Begin Var Begin Var Type Const Uses Type Пример. Type Пример. Type Const Пример. Сильно ветвящиеся деревья
Сильноветвящимися называются деревья, каждый из узлов которых может иметь более двух потомков. Максимальное количество потомков у одного узла называется степенью дерева. В частном случае, двоичное дерево есть дерево степени 2.
Следует различать несколько подвидов сильноветвящихся деревьев.
1. Дерево, каждый узел которого имеет не более чем N потомков (N – постоянное для данного дерева число). N = 8; pMyTreeNode = ^MyTreeNode; MyTreeNode = record iKey: integer; // Ключевое поле nKey: integer; // Количество посещений данного узла mpChild: array [1 .. N] of pMyTreeNode; npChild: integer; // Текущее количество потомков, <= N end;
Недостаток такой структуры состоит в том, что для некоторых узлов число N намного больше количества реальных потомков (память под узел типа
2. Дерево, каждый узел которого может иметь произвольное (неограниченное) количество потомков. Ссылки на них хранятся в элементах динамического массива. pMyTreeNode = ^MyTreeNode; MyTreeNode = record iKey: integer; nKey: integer; mpChild: array of pMyTreeNode; end;
В записи MyTreeNode массив mpChild представлен лишь указателем на то место оперативной памяти, где располагаются элементы динамического массива. «Разбирательство» с увеличением или уменьшением числа элементов динамического массива ложится на операционную систему. При «переделке» дерева на хранение на дисках программист вынужден сам решать, где ему располагать элементы массива mpChild, что не всегда легко. Разговор об этом позже будет продолжен. 3. Дерево, каждый узел которого может иметь произвольное (неограниченное) количество потомков. Для узлов такого дерева уместно ввести новое отношение «старший брат» – «младший брат». Все потомки узла-предка являются «братьями», с узла-предка имеется ссылка только на одного из них – на «старшего брата». «Братья» (от старшего к младшему) выстроены в виде линейного списка. pMyTreeNode = ^MyTreeNode; MyTreeNode = record iKey: integer; pChild, pBrother: pMyTreeNode; end;
4. Дерево, каждый узел которого ссылается на своих потомков с помощью вспомогательного дерева. Применяется для деревьев очень большой степени, когда даже отношение «предок-потомок» приходится оптимизировать по скорости доступа. program Project1;
{$APPTYPE CONSOLE}
// Следует «включать» один и только один из этих трёх режимов
SysUtils;
{$IFDEF StaticArrayOfChildren } N = 8; {$ENDIF}
pMyTreeNode = ^MyTreeNode;
MyTreeNode = record // Узел дерева iKey: integer; nKey: integer;
{$IFDEF StaticArrayOfChildren } mpChild: array [1 .. N] of pMyTreeNode; {$ENDIF} {$IFDEF DynamicArrayOfChildren } mpChild: array of pMyTreeNode; {$ENDIF} {$IFDEF ListOfBrothers} pChild, pNext: pMyTreeNode; {$ENDIF} end;
MyTableType = record // элемент таблицы посещаемости ключей дерева iKey: integer; nKey: integer; end;
MyProcType = procedure (var pThis: pMyTreeNode); // Процедурный тип для процедур, работающих с посещаемыми узлами дерева pRoot: pMyTreeNode; mTable: array of MyTableType; iKeySought: integer; nAux: integer; procedure Away(i: integer); // Процедура для «аварийного» завершения программы в нештатных ситуациях WriteLN(‘Выброс – ‘, i); ReadLN; Halt; end;
procedure ReadTree; F: TextFile; S: string; iDepth, iDepthPrev, i: integer; pCurr,pParent,pAux: pMyTreeNode; mPath: array of pMyTreeNode;
if pRoot <> nil then exit;
Finalize(mPath);
AssignFile(F, 'Tree1.TXT'); Reset(F);
iDepthPrev:= -1;
Дата добавления: 2014-01-03; Просмотров: 345; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |