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

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

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



Търсене

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))


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

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



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


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



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



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 дърво
Тривъзелна реконструкция след вмъкване




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


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


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

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

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