Дървета - първа част

Дърво абстрактен тип данни (АТД)

Дърво е ADT, което съхранява елементите йерархично.
С изключение на един елемент (корен) всеки елемент от дървото има един родител и нула или повече деца.
Терминология и основни свойства
  • Корен: възел без родител (A)
  • Вътрешен възел: възел с поне едно дете (A, B, C, F)
  • Външен възел (т.е. лист ): връх без деца (E, I, J, K, G, H, D)
  • Предшественик на възел (K): родител (F), баба (B), прабаба (A)
  • Дълбочина на възел (F): брой на предшествениците (2)
  • Височина на дърво: максимална дълбочина (3) на възел (J)
  • Наследници на възел (A): дете (B), внуче (F), правнуче (I)
  • Поддърво с корен (C) се състои от възел (C) и всички негови наследници (G, H)

Наредени дървета

Функции за дърво АТД
Интерфейс за дърво АТД
html-6.1a (InspectablePositionalContainer)  [link]
html-6.1b (PositionalContainer)
html-6.1c (InspectableTree)
html-6.1d (Tree)


Основни алгоритми за дърво АТД


Input
Output

root() None
Position
O(1)
parent(v) Position Position O(1)
isInternal(v)
Position bool
O(1)
isExternal(v) Position bool
O(1)
isRoot(v) Position bool
O(1)
children(v) Position Iterator of positions O(cv)
swapElements(v,w) Two positions
None
O(1)
replaceElement(v,e)
A position and an object
None
O(1)
elements() None
Iterator of objects
O(n)
positions() None
Iterator of positions
O(n)

Дълбочина и височина

Дълбочина на възел
v от дървото T е броят на предшествениците му, без самия възел v.
html-6.3 (depth)

Височина на възел v в дървото T се дефинира рекурсивно:
Височина на дървото T е височината на корена на T.
html-6.5 (height1)
html-6.6 (height2)

Preorder обхождане
Algorithm preOrder(v)
      visit(v)
     for each child w of v
          preOrder(w)

Отпечатване на дърво: приложение на Preorder обхождане
html-6.9 (preorderPrint)

Използване на Preorder обхождане за представяне на дърво
html-6.10 (parentPrint)

Postorder обхождане
Algorithm postOrder(v)
     for each child w of v
          postOrder(w)
     visit(v)

Пример за използване на Postorder обхождане
html-6.12 (postorderPrint)

Postorder алгоритъм за пресмятане на използването на диска
html-6.13 (diskSpace)

Други видове обхождания