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

Дърво - дефиниция, терминология и основни свойства
Наредени дървета
Функции за дърво АТД
Дълбочина и височина на възел
Preorder обхождане
Postorder обхождане
Други видове обхождания


Дърво

Дърво е нелинейна стуктура от данни, която съхранява елементите йерархично.
С изключение на един елемент (корен) всеки елемент от дървото има един родител и нула или повече деца.
Терминология и основни свойства
  • Корен: възел без родител (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)
  • Линейно представяне: A(B(E, F(I, J, K)), C(G, H), D)


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

Функции за дърво АТД
Интерфейс за дърво АТД

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)

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