13. Търсещи дървата - първа част

Речник АТД
Двоични дървета за търсене
- Търсене
- Операции за обновяване - вмъкване и изтриване
- Най-добър и най-лош случай
- C++ реализация
AVL дървета
- Вмъкване в AVL дърво
- Премахване на възел от AVL дърво
- Времена за изпълнение на операциите на речник АТД с реализация като AVL дърво
- C++ реализация


Речник АТД

(11. Речници - първа част)

Ще бъдат изучени няколко структури от данни, базирани на дървета за реализиране на наредени речници.
Основните операции за нареден речник АТД са:

Двоични дървета за търсене

(7. Дървета - втора част)
6(2(1, 4), 9(8, -))

Ключовете на речника в ненамаляващ ред:
1  2  4  6  8  9



Търсене

Algorithm find (k, v)
    if T.isExternal (v)
        return Position(null)
   if k < key(v)
        return find(k, T.leftChild(v))
   else if k = key(v)
        return Position(v)
   else { k > key(v) }
return find(k, T.rightChild(v))
   find(4)
4 < 6 - ляво
4 > 2 - дясно
4 = 4 - намерено!

find(7)
7 > 6 - дясно
7 < 9 - ляво
7 < 8 - ляво
листо - няма!


Операции за обновяване (актуализиране)

Вмъкване
Пример: insert 5



Изтриване
Пример: remove 4



Нека ключът k за изтриване се съхранява във възел v, чийто деца са вътрешни възли.
Пример: remove 3



Най-добър и най-лош случай




Binary Search Tree - визуализация

Binary Search Tree - лекция на "разбираем" английски

Binary Search Trees, BST Sort - лекция в MIT


C++ реализация

A Binary Search Tree in C++
html-9.2 (Position)
html-9.3 (BST1)
html-9.4 (BST2)
html-9.5 (BST3)
html-9.6 (BST4)

except.h  -   LBTree.h   -   BSTree.cpp


AVL дървета

Пример: AVL дърво - 44(17(-,32),78(50(48,62),88))


Вмъкване в AVL дърво
Тривъзелно преструктуриране (след вмъкване)




Премахване на възел от AVL дърво


Ребалансиране след премахване



Времена за изпълнение на операциите на речник АТД с реализация като AVL дърво

AVL tree - визуализация

AVL Trees, AVL Sort - лекция в MIT


C++ реализация

html-9.8 (AVL Item)
html-9.9 (AVL Tree 2)
html-9.10 (AVL Tree 1)