Drzewa binarne - podstawy

1. Czym jest drzewo?

Drzewo to hierarchiczna struktura danych składająca się z węzłów (nodes) połączonych krawędziami (edges).

Kluczowe właściwości:

  • Jeden węzeł korzeń (root) na szczycie
  • Każdy węzeł może mieć dzieci (children)
  • Węzły bez dzieci to liście (leaves)
  • Brak cykli – nie można wrócić do tego samego węzła

Wizualizacja:

        A  ← Korzeń (root)
       / \
      B   C  ← Dzieci A
     / \   \
    D   E   F  ← Liście (leaves)

2. Czym jest drzewo binarne?

Drzewo binarne to drzewo, w którym każdy węzeł ma maksymalnie 2 dzieci: - Lewe dziecko (left child) - Prawe dziecko (right child)

Przykład:

        10
       /  \
      5    15
     / \   / \
    3   7 12  20

3. Terminologia drzew

Podstawowe pojęcia:

           1  ← Korzeń (root), poziom 0, wysokość 3
          / \
         2   3  ← Poziom 1
        / \   \
       4   5   6  ← Poziom 2
      /
     7  ← Liść, poziom 3

Węzeł (Node): - Przechowuje wartość (data) - Wskaźniki do dzieci (left, right) - Opcjonalnie: wskaźnik do rodzica (parent)

Korzeń (Root): Węzeł na szczycie (bez rodzica)

Liść (Leaf): Węzeł bez dzieci

Rodzic (Parent): Węzeł z dziećmi

Dzieci (Children): Węzły poniżej rodzica

Rodzeństwo (Siblings): Węzły z tym samym rodzicem

Przodek (Ancestor): Dowolny węzeł na ścieżce do korzenia

Potomek (Descendant): Dowolny węzeł w poddrzewie

Wysokość (Height): Najdłuższa ścieżka od węzła do liścia - Wysokość drzewa = wysokość korzenia

Głębokość (Depth): Długość ścieżki od korzenia do węzła

Poziom (Level): Głębokość + 1 (korzeń na poziomie 0)


4. Implementacja węzła

Wizualizacja utworzonego drzewa:

      10
     /  \
    5    15
   / \
  3   7

5. Typy drzew binarnych

5.1. Pełne drzewo binarne (Full Binary Tree)

Każdy węzeł ma 0 lub 2 dzieci (nigdy 1).

        1
       / \
      2   3
     / \
    4   5

5.2. Zupełne drzewo binarne (Complete Binary Tree)

Wszystkie poziomy wypełnione oprócz ostatniego (wypełniany od lewej).

        1
       / \
      2   3
     / \  /
    4  5 6

Użycie: Kopce (heaps)

5.3. Doskonałe drzewo binarne (Perfect Binary Tree)

Wszystkie poziomy całkowicie wypełnione.

        1
       / \
      2   3
     / \ / \
    4  5 6  7

Właściwości: - Liczba węzłów: 2^(h+1) - 1 - Wysokość h → 2^(h+1) - 1 węzłów

5.4. Zdegenerowane drzewo (Degenerate Tree)

Każdy węzeł ma tylko 1 dziecko (jak lista).

    1
     \
      2
       \
        3
         \
          4

Najgorszy przypadek – jak linked list!


6. Podstawowe operacje

6.1. Obliczanie wysokości

6.2. Liczenie węzłów

6.3. Liczenie liści


7. Wyszukiwanie w drzewie

7.1. Wyszukiwanie wartości (DFS)

7.2. Wyszukiwanie węzła


8. Minimum i maksimum


9. Wizualizacja drzewa

Wynik:

`-- 10
    |-- 5
    |   |-- 3
    |   |   |-- None
    |   |   `-- None
    |   `-- 7
    |       |-- None
    |       `-- None
    `-- 15
        |-- None
        `-- None

10. Sprawdzanie właściwości drzewa

10.1. Czy drzewo jest pełne?

10.2. Czy drzewo jest zupełne?


11. Porównywanie drzew


12. Tworzenie lustrzanego odbicia


13. Suma wartości w drzewie


14. Najdłuższa ścieżka (średnica)


15. Zastosowania drzew binarnych

15.1. Drzewo wyrażeń

15.2. Drzewo decyzyjne


16. Złożoność operacji

Operacja Złożoność czasowa Uwagi
Wyszukiwanie O(n) Najgorszy: wszystkie węzły
Wstawianie O(n) Zależy od struktury
Usuwanie O(n) Najgorszy: wszystkie węzły
Wysokość O(n) Odwiedź wszystkie węzły
Liczenie węzłów O(n) Odwiedź wszystkie węzły

Uwaga: Dla BST (drzewo binarne wyszukiwań) operacje mogą być O(log n)!


17. Podsumowanie

Drzewo binarne:

  • Hierarchiczna struktura danych
  • Każdy węzeł ma maksymalnie 2 dzieci
  • Kluczowe pojęcia: korzeń, liść, wysokość, głębokość
  • Operacje rekurencyjne: wysokość, liczenie, wyszukiwanie

Typy drzew: - Pełne: 0 lub 2 dzieci - Zupełne: Wypełnione od lewej - Doskonałe: Wszystkie poziomy pełne - Zdegenerowane: Jak lista

Podstawowe operacje: - Wysokość: O(n) - Liczenie węzłów: O(n) - Wyszukiwanie: O(n) - Minimum/maksimum: O(n)

Zastosowania: - Drzewa wyrażeń (matematyka) - Drzewa decyzyjne (AI) - Hierarchie (systemy plików) - Drzewa wyszukiwań (BST)

Zalety: - Naturalna hierarchia - Efektywne operacje (dla zbalansowanych) - Elastyczna struktura

Wady: - Może degenerować do listy O(n) - Wymaga balansowania dla efektywności - Bardziej złożone niż tablice/listy

Co dalej warto poznać:

  • BST (Binary Search Tree) – O(log n) dla zbalansowanych
  • Przechodzenie drzew (in-order, pre-order, post-order)
  • Drzewa AVL – automatyczne balansowanie
  • Kopce (heaps) – struktura priorytetowa
  • B-drzewa – dla baz danych