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

Содержание

Дерево – это совокупность элементов, называемых узлами (один из которых определен как корень), и отношений («родительских»), образующих иерархическую структуру узлов. Формально дерево ( tree ) определяется как конечное множество T одного или более узлов со следующими

Слайд 1Двоичные деревья в Паскаль.
Подготовила
учитель информатики
Радова А.Ф.
Теоретический
молдо-турецкий
лицей им.С.Демиреля

Двоичные деревья в Паскаль.Подготовила учитель информатикиРадова А.Ф.Теоретический молдо-турецкий лицей им.С.Демиреля

Слайд 2Дерево – это совокупность элементов, называемых узлами (один из которых определен

как корень), и отношений («родительских»), образующих иерархическую структуру узлов.

Формально дерево ( tree ) определяется как конечное множество T одного или более узлов со следующими свойствами:
• Существует один выделенный узел, а именно – корень ( root ) данного дерева;
• Остальные узлы (за исключением корня) распределены среди m >0 непересекающихся множеств T 1 , T 2 , …. T m , и каждое из этих множеств, в свою очередь, является деревом; деревья T 1 , T 2 , ... T m называются поддеревьями данного корня.

Дерево – это совокупность элементов, называемых узлами (один из которых определен как корень), и отношений («родительских»), образующих

Слайд 3Можно привести еще одно формальное определение дерева:
• Один узел является деревом. Этот

же узел также является корнем этого дерева.
• Пусть n – это узел, а T 1 , T 2 , ... T m – деревья с корнями n 1 , n 2 , … n m соответственно. Можно построить новое дерево, сделав n родителем узлов n 1 , n 2 , … n m . В этом дереве n будет корнем, а T 1 , T 2 , ... T m – поддеревьями этого корня. Узлы n 1 , n 2 , … n m называются сыновьями узла n .

Можно привести еще одно формальное определение дерева:•	Один узел является деревом. Этот же узел также является корнем этого

Слайд 4Из приведенных выше определений следует, что каждый узел дерева является корнем

некоторого поддерева данного дерева.

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

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

Слайд 5Рассмотрим эти понятия на примере дерева с семью узлами.

Рассмотрим эти понятия на примере дерева с семью узлами.

Слайд 6Узел A является корнем, который имеет два поддерева { B }

и { C , D , E , F , G }. Корнем дерева{ C , D , E , F , G } является узел C . Уровень узла C равен 1 по отношению ко всему дереву. Он имеет три поддерева { D }, { E }и { F , G }, поэтому степень узла C равна 3. Концевыми узлами (листьями) являются узлы B , D , E , G .

Путем из узла n 1 в узел n k называется последовательность узлов n 1 , n 2 , … n k , где для всех i , 1, i , k , узел n i является родителем узла n i +1 . Длиной пути называется число, на единицу меньше числа узлов, составляющего этот путь.

Узел A является корнем, который имеет два поддерева { B } и { C , D ,

Слайд 7Если существует путь из узла a в узел b , то

в этом случае узел a называется предком узла b , а узел b – потомком узла a . Любой узел одновременно является предком и потомком самого себя.
Например, на рисунке предками узла G будут сам узел G и узлы F , C и A . Потомками узла C будут являться сам узел C и узлы D , T , F , G . В дереве только корень не имеет предков, а листья не имеют потомков.
Если существует путь из узла a в узел b , то в этом случае узел a называется

Слайд 8Предок узла, имеющий уровень на единицу меньше уровня самого узла, называется

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

Слайд 9Высотой узла дерева называется длина самого длинного пути от этого узла

до какого-либо листа. Глубина узла определяется как длина пути от корня до этого узла.
Лес – это множество (обычно упорядоченное), содержащее несколько непересекающихся деревьев. Узлы дерева при условии исключения корня образуют лес.

Высотой узла дерева называется длина самого длинного пути от этого узла до какого-либо листа. Глубина узла определяется

Слайд 10Порядок узлов



Если в определении дерева имеет значение порядок поддеревьев T

1 , T 2 , ... T m , то дерево является упорядоченным.
Сыновья узла обычно упорядочиваются слева направо. Поэтому деревья, приведенные на рисунке, являются различными.

Порядок узлов Если в определении дерева имеет значение порядок поддеревьев T 1 , T 2 , ...

Слайд 11Обходы дерева.
Существует несколько способов обхода всех узлов дерева. Три наиболее часто

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

Обходы дерева.Существует несколько способов обхода всех узлов дерева. Три наиболее часто используемых способа :прямой, обратный,симметричный .Все три

Слайд 12• Пусть дерево T имеет корень n и поддеревья T 1 ,

T 2 , ... T m , как показано на рисунке

Тогда для различных способов обхода имеем следующее:
Прямой обход . Сначала посещается корень n , затем в прямом порядке узлы поддерева T 1 , далее все узлы поддерева T 2 и т.д. Последними посещаются в прямом порядке узлы поддерева T m .
Обратный обход . Сначала посещаются в обратном порядке все узлы поддерева T 1 , затем в обратном порядке узлы поддеревьев T 2 … T m , последним посещается корень n .
Симметричный обход . Сначала в симметричном порядке посещаются все узлы поддерева T 1 , затем корень n , после чего в симметричном порядке все узлы поддеревьев T 2 … T m .

•	Пусть дерево T имеет корень n и поддеревья T 1 , T 2 , ... T m

Слайд 13Рассмотрим пример всех способов обхода дерева:

Рассмотрим пример всех способов  обхода дерева:

Слайд 14Порядок узлов данного дерева в случае прямого обхода будет следующим:
1

2 3 5 8 9 6 10 4 7.
Обратный обход этого же дерева даст нам следующий порядок узлов: 2 8 9 5 10 6 3 7 4 1.
При симметричном обходе мы получим следующую последовательность узлов:
2 1 8 5 9 3 10 6 7 4.

Порядок узлов данного дерева в случае прямого обхода будет следующим: 1 2 3 5 8 9 6

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

помеченным деревом.
Метка узла – это значение, которое «хранится» в узле.
Полезна следующая аналогия:
дерево –это список,
узел – это позиция,
метка –это элемент.
Помеченные деревья и деревья выражений.Дерево, у которого узлам сопоставлены метки, называется помеченным деревом. Метка узла – это

Слайд 16Реализация деревьев
Пусть дерево T имеет узлы 1, 2, …., n .

Самым простым представлением дерева T будет линейный массив A , где каждый элемент A [ i ] содержит номер родительского узла (является курсором на родителя). Поскольку корень дерева не имеет родителя, то его курсор будет равен 0.




Реализация деревьевПусть дерево T имеет узлы 1, 2, …., n . Самым простым представлением дерева T будет

Слайд 17Рассмотрим пример. Для приведенного на рисунке дерева построим линейный массив по следующему

правилу:

A [ i ]= j , если узел j является родителем узла i , A [ i ]=0, если узел i является корнем. Тогда массив будет выглядеть следующим образом:

Рассмотрим пример. Для приведенного на рисунке дерева построим линейный массив по следующему правилу: A [ i ]=

Слайд 18Двоичные деревья
Двоичное или бинарное дерево – это наиболее важный тип деревьев.


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

Слайд 20Виды деревьев:

Виды деревьев:

Слайд 21Изображенные на рисунке а) и б) ниже, – это различные деревья,

хотя они оба похожи на обычное дерево (рис. в)).
Изображенные на рисунке а) и б) ниже, – это различные деревья, хотя они оба похожи на обычное

Слайд 22Представление двоичных деревьев
Бинарное дерево можно представить в виде динамической структуры данных

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

Слайд 23Пример фрагмента программы дерева:
Type
Tree=^s;
S=record

Е: <тип хранимой информации>;
Left , right : tree ;
End ;

Пример фрагмента программы дерева:Type  Tree=^s;  S=record  Е: ;    Left , right

Слайд 24Изобразим схематично пример дерева, организованного в виде динамической структуры данных:
Данное дерево

организовано таким образом, что для каждого узла все ключи (значения узлов) его левого поддерева меньше ключа этого узла, а все ключи его правого поддерева больше. Такой способ построения дерева называется деревом поиска или двоичным упорядоченным деревом.
Изобразим схематично пример дерева, организованного в виде динамической структуры данных:Данное дерево организовано таким образом, что для каждого

Слайд 25Дерево поиска
Поиск в упорядоченном дереве выполняется по следующему алгоритму:
• Если дерево не

пусто, то нужно сравнить искомый ключ с ключом в корне дерева:
- если ключи совпадают, поиск завершен;
- если ключ в корне больше искомого, выполнить поиск в левом поддереве;
- если ключ в корне меньше искомого, выполнить поиск в правом поддереве.
• Если дерево пусто, то искомый элемент не найден.

Дерево поискаПоиск в упорядоченном дереве выполняется по следующему алгоритму:•	Если дерево не пусто, то нужно сравнить искомый ключ

Слайд 26Операции с двоичными деревьями
Для работы с двоичными деревьями важно уметь выполнять

следующие операции:
• Поиск по дереву;
• Обход дерева;
• Включение узла в дерево;
• Удаление узла из дерева.

Операции с двоичными деревьямиДля работы с двоичными деревьями важно уметь выполнять следующие операции:•	Поиск по дереву;•	Обход дерева;•	Включение узла

Слайд 27Пример функции поиска
function find(root:tree; k:integer; var p, parent:tree):Boolean;
begin

p:=root;
while p<>nil do begin
if k=p^.inf then begin { узел с таким ключом есть }
find:=true;
exit;
end;
parent:=p {запомнить указатель на предка}
if k p := p ^. Left {спуститься влево}
else p := p ^. right ; {спуститься вправо}
end;
find:=false;
end;

Пример функции поискаfunction find(root:tree; k:integer; var p, parent:tree):Boolean; begin  p:=root;  while pnil do begin

Слайд 28Вставка узла в двоичное дерево
Правило:
Для того чтобы вставить узел, необходимо

найти его место.
Для этого мы сравниваем вставляемый ключ с корнем, если ключ больше, чем ключ корня, уходим в правое поддерево, а иначе – в левое. Тем же образом продвигаемся дальше, пока не дойдем до конечного узла (листа). Сравниваем вставляемый ключ с ключом листа. Если ключ меньше ключа листа, то добавляем листу левого сына, а иначе – правого сына.
Вставка узла в двоичное дерево Правило:Для того чтобы вставить узел, необходимо найти его место. Для этого мы

Слайд 29Например, необходимо вставить в дерево, изображенное на рисунке, узел с ключом

5.

Сравниваем 5 с ключом корня; 5<10, следовательно, уходим в левое поддерево. Сравниваем 5 и 6; 5<6, спускаемся влево. Следующий узел является конечным (листом). Сравниваем 5 и 1; 5>1, следовательно, вставляем правого сына. Получим дерево с новым узлом, которое сохранило все свойства дерева поиска.

Например, необходимо вставить в дерево, изображенное на рисунке, узел с ключом 5.Сравниваем 5 с ключом корня; 5

Слайд 30Пример программы удаления узла из дерева.
procedure del ( var root :

tree ; k: integer );
var
p : tree ; {удаляемый узел}
parent : tree ; {предок удаляемого узла}
y : tree ; {узел, заменяющий удаляемый}
function spusk(p:tree):tree;
var
y : tree ; {узел, заменяющий удаляемый}
pred:tree; { предок узла “y”}
begin
y:=p^.right;
if y^.left=nil then y^.left:=p^.left {1}
else {2}
begin
repeat
pred:=y; y:=y^.left;
until y^.left=nil;
y^.left:=p^.left; {3}
pred^.left:=y^.right; {4}
y^.right:=p^.right; { 5}
end;
spusk:=y;
end;
begin
if not find(root, k, p, parent) then {6}
begin writeln(' такого элемента нет '); exit; end;
if p^.left=nil t hen y:=p^.right {7}
else
if p^.right=nil then y:=p^.left {8}
else y:=spusk(p); {9}
if p=root then root:=y {10}
else {11}
if k parent^.left:=y
else parent^.right: =y;
dispose(p); {12}
end.

Пример программы удаления узла из дерева.procedure del ( var root : tree ; k: integer ); var

Слайд 31В функцию del передаются указатель root на корень дерева и ключ

k удаляемого элемента. С помощью функции find определяются указатели на удаляемый элемент p и его предка parent . Если искомого элемента в дереве нет, то выдается сообщение ( {6}) .
В операторах {7}-{9} определяется указатель на узел y , который должен заменить удаляемый. Если у узла p нет левого поддерева, на его место будет поставлена вершина (возможно пустая) его правого поддерева ({7}).
Иначе, если у узла p нет правого поддерева, на его место будет поставлена вершина его левого поддерева ({8}).
В противном случае, когда оба поддерева существуют, для определения замещающего узла вызывается функция spusk , выполняющая спуск по дереву ({9}).
В этой функции первым делом проверяется особый случай, описанный выше ({1}). Если же этот случай (отсутствие левого потомка у правого потомка удаляемого узла) не выполняется, организуется цикл ({2}), на каждой итерации которого указатель на текущий элемент запоминается в переменной pred .А указатель y смещается вниз и влево до того момента, пока не станет ссылаться на узел, не имеющий левого потомка.
В операторе {3} к этой пустующей ссылке присоединяется левое поддерево удаляемого узла. Перед тем как присоединять к этому узлу правое поддерево удаляемого узла ({5}), требуется «пристроить» его собственное правое поддерево. Мы присоединяем его к левому поддереву предка узла y , заменяющего удаляемый ({4}), поскольку этот узел перейдет на новое место.
Функция spusk возвращает указатель на узел, заменяющий удаляемый. Если мы удаляем корень дерева, надо обновить указатель на корень ({10}), иначе – присоединить этот указатель к соответствующему поддереву предка удаляемого узла ({11}).
После того как узел удален из дерева, освобождается занимаемая им память ({12}).

В функцию del передаются указатель root на корень дерева и ключ k удаляемого элемента. С помощью функции

Что такое shareslide.ru?

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


Для правообладателей

Яндекс.Метрика

Обратная связь

Email: Нажмите что бы посмотреть