Menu Home

Бесплатная техническая библиотека для любителей и профессионалов Бесплатная техническая библиотека


Информатика и информационные технологии. Графы (конспект лекций)

Конспекты лекций, шпаргалки

Справочник / Конспекты лекций, шпаргалки

Комментарии к статье Комментарии к статье

Оглавление (развернуть)

ЛЕКЦИЯ № 9. Древовидные структуры данных

1. Древовидные структуры данных

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

Если использовать рекурсивное определение, предложенное Н. Виртом, то древовидная структура данных с базовым типом t - это либо пустая структура, либо узел типа t, с которым связано конечное множество древовидных структур с базовым типом t, называемых поддеревьями.

Далее дадим определения, используемые при оперировании древовидными структурами.

Если узел у находится непосредственно под узлом х, то узел у называется непосредственным потомком узла х, а x - непосредственным предком узла у, т. е., если узел x находится на i-ом уровне, то соответственно узел у находится на (i + 1) - ом уровне.

Максимальный уровень узла дерева называется высотой или глубиной дерева. Предка не имеет только один узел дерева - его корень.

Узлы дерева, у которых не имеется потомков, называются терминальными узлами (или листами дерева). Все остальные узлы называются внутренними узлами. Количество непосредственных потомков узла определяет степень этого узла, а максимально возможная степень узла в данном дереве определяет степень дерева.

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

Если пройти от корня дерева к некоторому конкретному узлу, то количество ветвей дерева, которое при этом будет пройдено, называется длиной пути для этого узла. Если все ветви (узлы) у дерева упорядочены, то дерево называется упорядоченным.

Частным случаем древовидных структур являются бинарные деревья. Это деревья, в которых каждый потомок имеет не более двух потомков, называемых левым и правым поддеревьями. Таким образом, бинарное дерево - это древовидная структура, степень которой равна двум.

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

Дерево, степень которого больше двух, называется сильноветвящимся.

2. Операции над деревьями

Далее будем рассматривать все операции применительно к бинарным деревьям.

I. Построение дерева

Приведем алгоритм построения упорядоченного дерева.

1. Если дерево пусто, то данные переносятся в корень дерева. Если же дерево не пусто, то осуществляется спуск по одной из его ветвей таким образом, чтобы упорядоченность дерева не нарушалась. В результате новый узел становится очередным листом дерева.

2. Чтобы добавить узел в уже существующее дерево, можно воспользоваться вышеприведенным алгоритмом.

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

Можно поступить таким образом: поменять удаляемый узел местами с узлом, имеющем самое большое значение ключа в левом поддереве, или с узлом, имеющем самое малое значение ключа в правом поддереве, а затем удалить искомый узел как лист.

II. Поиск узла с заданным значением ключевого поля

При осуществлении этой операции необходимо совершить обход дерева. Необходимо учитывать различные формы записи дерева: префиксную, инфиксную и постфиксную.

Возникает вопрос: каким образом представить узлы дерева, чтобы было наиболее удобно работать с ними? Можно представлять дерево с помощью массива, где каждый узел описывается величиной комбинированного типа, у которой информационное поле символьного типа и два поля ссылочного типа. Но это не совсем удобно, так как деревья имеют большое количество узлов, заранее не определенное. Поэтому лучше всего при описании дерева использовать динамические переменные. Тогда каждый узел представляется величиной одного типа, которая содержит описание заданного количества информационных полей, а количество соответствующих полей должно быть равно степени дерева. Логично отсутствие потомков определять ссьшкой nil. Тогда на языке Pascal описание бинарного дерева может выглядеть следующим образом:

TYPE TreeLink = ^Tree;

Tree = record;

Inf : <тип данных>;

Left, Right : TreeLink;

End.

3. Примеры реализации операций

1. Построить дерево из n узлов минимальной высоты, или идеально сбалансированное дерево (количество узлов левого и правого поддеревьев такого дерева должны отличаться не более чем на единицу).

Рекурсивный алгоритм построения:

1) первый узел берется в качестве корня дерева.

2) тем же способом строится левое поддерево из nl узлов.

3) тем же способом строится правое поддерево из nr узлов;

nr = n - nl - 1. В качестве информационного поля будем брать номера узлов, вводимые с клавиатуры. Рекурсивная функция, реализующая данное построение, будет выглядеть следующим образом:

Function Tree(n : Byte) : TreeLink;

Var t : TreeLink; nl,nr,x : Byte;

Begin

If n = 0 then Tree := nil

Else

Begin

nl := n div 2;

nr = n - nl - 1;

writeln('Введите номер вершины ');

readln(x);

new(t);

t^.inf := x;

t^.left := Tree(nl);

t^.right := Tree(nr);

Tree := t;

End;

{Tree}

End.

2. В бинарном упорядоченном дереве найти узел с заданным значением ключевого поля. Если такого элемента в дереве нет, то добавить его в дерево.

Procedure Search(x : Byte; var t : TreeLink);

Begin

If t = nil then

Begin

New(t);

t^inf := x;

t^.left := nil;

t^.right := nil;

End

Else if x < t^.inf then

Search(x, t^.left)

Else if x > t^.inf then

Search(x, t^.right)

Else

Begin

{обработка найденного элемента}

...

End;

End.

3. Написать процедуры обхода дерева в прямом, симметричном и обратном порядке соответственно.

3.1. Procedure Preorder(t : TreeLink);

Begin

If t <> nil then

Begin

Writeln(t^.inf);

Preorder(t^.left);

Preorder(t^.right);

End;

End;

3.2. Procedure Inorder(t : TreeLink);

Begin

If t <> nil then

Begin

Inorder(t^.left);

Writeln(t^.inf);

Inorder(t^.right);

End;

End.

3.3. Procedure Postorder(t : TreeLink);

Begin

If t <> nil then

Begin

Postorder(t^.left);

Postorder(t^.right);

Writeln(t^.inf);

End;

End.

4. В бинарном упорядоченном дереве удалить узел с заданным значением ключевого поля.

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

Procedure Delete1(x : Byte; var t : TreeLink);

Var p : TreeLink;

Procedure Delete2(var q : TreeLink);

Begin

If q^.right <> nil then Delete2(q^.right)

Else

Begin

p^.inf := q^.inf;

p := q;

q := q^.left;

End;

End;

Begin

If t = nil then

Writeln('искомого элемента нет')

Else if x < t^.inf then

Delete1(x, t^.left)

Else if x > t^.inf then

Delete1(x, t^.right)

Else

Begin

P := t;

If p^.left = nil then

t := p^.right

Else

If p^.right = nil then

t := p^.left

Else

Delete2(p^.left);

End;

End.

Автор: Цветкова А.В.

<< Назад: Древовидные структуры данных (Древовидные структуры данных. Операции над деревьями. Примеры реализации операций)

>> Вперед: Объектный тип данных (Объектный тип в Pascal. Понятие объекта, его описание и использование. Наследование. Создание экземпляров объектов. Компоненты и область действия)

Рекомендуем интересные статьи раздела Конспекты лекций, шпаргалки:

▪ Клиническая психология. Шпаргалка

▪ Основы социологии и политологии. Шпаргалка

▪ Экономика предприятия. Шпаргалка

Смотрите другие статьи раздела Конспекты лекций, шпаргалки.

Читайте и пишите полезные комментарии к этой статье.

<< Назад

Последние новости науки и техники, новинки электроники:

Мизофония может иметь выраженную генетическую основу 15.10.2026

Для большинства людей звук жевания, дыхания или сопения остается практически незаметной частью повседневной жизни. Однако у людей с мизофонией такие совершенно обычные звуки способны вызывать мгновенную и крайне сильную негативную реакцию. Причины этого состояния до сих пор изучены недостаточно, однако новое исследование указывает на важную роль наследственности. Полученные данные свидетельствуют о том, что предрасположенность к мизофонии может иметь глубокую генетическую основу. Исследованием занималась команда Медицинской школы Йельского университета, сосредоточившая внимание на семейной истории людей с этим расстройством. В отличие от ряда предыдущих работ, проводившихся преимущественно с помощью дистанционных опросов, на этот раз специалисты непосредственно обследовали 101 человека с мизофонией и членов их семей. Такой подход позволил исследователям оценить не только распространенность состояния среди родственников, но и возможные связи с другими особенностями психического здоро ...>>

Запись магнитных данных с помощью сверхбыстрых лазерных импульсов 15.10.2026

Системы хранения данных постоянно сталкиваются с необходимостью одновременно увеличивать скорость записи, плотность информации и энергоэффективность. Один из возможных путей решения этой задачи связан с использованием света для управления магнитными состояниями материала. Инженеры Калифорнийского университета в Сан-Диего разработали метод, в котором специально сформированные лазерные импульсы позволяют изменять направление намагниченности, открывая перспективу создания более быстрых и компактных магнитных устройств памяти. Главное отличие нового подхода заключается в том, что исследователи управляют не составом магнитного материала, а характеристиками самого лазерного излучения. Ультрабыстрый лазер концентрирует энергию на микроскопическом участке поверхности. Когда диаметр светового пятна становится меньше 1,36 мкм, специалистам удается переключать направление намагниченности независимо от спиральности света, то есть направления вращения его поляризации. Это позволяет отказаться от ...>>

Биокаталитический способ получения хиральных оксазолидинонов 14.10.2026

Химия все чаще обращается к биологическим молекулам, чтобы сделать синтез сложных веществ более точным и эффективным. Особенно важны такие технологии при создании соединений, у которых одинаковый химический состав может сопровождаться разным пространственным расположением атомов и, следовательно, различными свойствами. Исследователи из Калифорнийского технологического института и Университета Питтсбурга предложили новый биокаталитический подход, позволяющий получать хиральные оксазолидиноны непосредственно из простых неактивированных алкенов. В основе предложенного метода лежит последовательность из двух реакций - азиридинирования и последующего расширения цикла. Этот каскад запускается с помощью гемопротеина, который выполняет функцию катализатора и позволяет направлять химическое превращение в нужную сторону. В результате из относительно простого исходного соединения формируется более сложная циклическая структура с заданной пространственной конфигурацией. Особенно существенным ...>>

Случайная новость из Архива

Превращение обычного материала в магнит 10.08.2020

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

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

Однако ученые уверяют, что им удалось вызвать магнетизм в материале, который раньше магнитным не был. Это пирит, "золото дураков" - минерал, который неопытные старатели часто принимают за золотые самородки. С помощью метода, известного как электролитический гейттинг, исследователи наделили его нехарактерными свойствами.

Сначала они поместили пирит в контакт с электролитом, после чего применили к соединению слабый - всего в 1 вольт - разряд. Это позволило переместить положительно заряженные молекулы в области соприкосновения пирита и электролита, создав тем самым измеримую магнитную силу. Интересно, что, как только напряжение было отключено, исчез и магнетизм. Данная особенность может помочь при проектировании электроники будущего поколения.

"Подавая напряжение, мы фактически вливаем электроны в материал. Получается, что если достичь достаточно высокой концентрации электронов, то материал самопроизвольно приобретает магнитные свойства. Раньше все это обсуждалось лишь в теории, и мы были чертовски удивлены, что наш метод сработал. Уверен, что раз опыт удался с пиритом, то в будущем мы сможем сделать ферромагнетиками и другие материалы", - поделился с прессой Крис Лейтон, ведущий автор исследования.

Другие интересные новости:

▪ В Нью-Йорке ожидается землетрясение

▪ Измеритель уровня звука NOR-118

▪ Диетическая кола не поможет похудеть

▪ 8-ядерные однокристальные системы от Allwinner

▪ Медицинские маски с нанослоем меди

Лента новостей науки и техники, новинок электроники

 

Интересные материалы Бесплатной технической библиотеки:

▪ раздел сайта Опыты по химии. Подборка статей

▪ статья Новалис. Знаменитые афоризмы

▪ статья Какой фрукт стал культовым в Китае во время правления Мао Цзедуна? Подробный ответ

▪ статья Ейе. Легенды, выращивание, способы применения

▪ статья Пудра. Простые рецепты и советы

▪ статья Восстановление купюры. Секрет фокуса

Оставьте свой комментарий к этой статье:

Имя:


E-mail (не обязательно):


Комментарий:





Главная страница | Библиотека | Статьи | Карта сайта | Отзывы о сайте

www.diagram.com.ua

www.diagram.com.ua
2000-2026