Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации 2часть / Лекция_28_29_Древовидные структуры.ppt
Скачиваний:
23
Добавлен:
11.05.2015
Размер:
257.54 Кб
Скачать

Удалить дерево

Destructor TBtr.Free;

Procedure Del(var p:Ttree);

begin

If (p<>Nil) then begin

Del(p^.A1);

Del(p^.A2);

Dispose(p);

p:=Nil;

end;

end;

Begin

Del(proot); inherited free;

end;

07/02/19

21

Симметричный обход слева направо

Procedure TBtr.Wrt1;

Procedure Wr(p:Ttree);

begin

if p<>nil then

begin

Wr(p^.A1);

Print(p^.Inf);

Wr(p^.A2);

end;

end;

begin

p:=proot; wr(p)

end;

07/02/19

22

Симметричный обход слева направо

1

0

 

6

 

2

 

 

 

5

1

8

2

3

 

 

0

0

 

 

 

2

 

 

 

1

1 6 8 10 20 21 25 30

07/02/19

23

 

Симметричный обход справа налево

Procedure TBtr.Wrt2;

Procedure Wr(p:Ttree);

begin

if p<>nil then

begin

Wr(p^.A2);

Print(p^.Inf);

Wr(p^.A1);

end;

end;

begin

p:=proot; wr(p)

end;

07/02/19

24

Симметричный обход справа налево

1 0

 

6

 

2

 

 

 

5

1

8

2

3

 

 

0

0

 

 

 

2

 

 

 

1

Procedure Wr(p:Ttree); begin

if p<>nil then begin

Wr(p^.A2);

Print(p^.Inf);

Wr(p^.A1);

end;

30 25 21 20 10 8 6 1

07/02/19

25

Поиск ключа не требует рекурсии

 

 

20>10

 

 

 

1

20<25

 

 

0

 

 

 

 

6

 

2

 

 

 

5

1

8

2

3

 

 

0

0

 

 

 

2

 

 

 

1

Найти

20

Затраты на поиск пропорциональны глубине дерева

О(log2n).

07/02/19

26

Метод poisk(k)

Const nok:Tkey=’некоторое значение<>key’;

Function TBtr.poisk(k:Tkey):Tinf;

begin p:=Proot;

While(p<>nil) and (p^.Inf.key<>k) do

If k<p^.Inf.key

then p:=p^.A1

else p:=p^.A2;

 

if p<>Nil then Result:=p^.inf

else Result.key:=nok;

end;

Обращение к методу

Inf:=tr.poisk(k);

If inf.key=nok then print(’нет ключа’)

else . . .

07/02/19

27

Поиск элемента с минимальным (максимальным) ключом

1

0

 

6

 

2

 

min k

 

 

5

max k

1

8

2

 

3

 

 

0

 

0

 

7

 

2

 

 

 

 

1

 

07/02/19

28

Методы поиска элемента с минимальным (максимальным) ключом

Function TBtr.Mink:TInf;

begin p:=proot;

While p^.A1<>Nil do p:=p^.A1;

Result:=p^.Inf;

end;

Function TBtr.Maxk:TInf;

begin p:=proot;

While p^.A2<>Nil do p:=p^.A2;

Result:=p^.Inf;

end;

07/02/19

29

Добавить новый элемент в дерево не нарушая его структуру

 

 

7<10

Добавить 7

7>6

 

1

 

 

0

 

 

 

 

 

6

 

2

 

7<8

 

5

1

8

2

3

 

 

0

0

 

7

 

2

 

 

 

1

Новый элемент всегда будет листом!

07/02/19

30