Vyhľadávací strom

Zovšeobecnenie spojkového zoznamu, kde jeden prvok má viac smerníkov.

Reprezentácia hierarchických štruktúr

Prvok vyhľadávacieho stromu

Ako to vyzerá v pamäti?

        left     +------+   right
            +--- |  5   | ----+
            |    +------+     |
            v                 V
    left +------+          +------+
    +----|  3   |          |  10  |
    |    +------+          +------+
    |
    V
+------+
|  1   |
+------+

Demo BST

https://www.cs.usfca.edu/~galles/visualization/BST.html

Na čo je to dobré?

Matematický výraz:  3 * (5 + 6)
        left     +------+   right
            +--- |  *   | ----+
            |    +------+     |
            v                 V
    left +------+          +------+
    +----| +    |---+      |   3  |
    |    +------+   |      +------+
    V               V
+------+         +------+
|  5   |         |  6   |
+------+         +------+

Prechádzanie BST

Akým spôsobom vieme strom zapísať do jedného riadka?

Inorder

Naľavo, hodnota, napravo

3 * 5 + 6

Pozor na zátvorky !!!

Preorder

hodnota, naľavo, napravo

Postorder

naľavo, napravo, hodnota

5 6 + 3 *

Načítanie do stromu

Ak máme zadaný zápis v jednom riadku, akým spôsobom ho môžeme uložiť do stromu?

Príklad na (binárny) vyhľadávací strom

struct binary_tree {
    int data;
    struct binary_tree* left;
    struct binary_tree* right;
};

Vyhľadávanie vo vyhľadávacom strome

(pre-order)

  1. Pozrieme sa na koreň stromu.
  2. Ak sa hodnoty zhodujú, našli sme výsledok.
  3. Ak sa nezhodujú, a hodnota je menšia, hľadáme vľavo.
  4. Ak je hodnota väčšia, hľadáme vpravo.

Vymazanie z BST

Vyhľadáme prvok so zadanou hodnotou.

Triedenie s pomocou BST

Bibliografia

https://en.wikipedia.org/wiki/Binary_search_tree https://gist.github.com/ArnonEilat/4611213 http://www.zentut.com/c-tutorial/c-binary-search-tree/