Cvičení 6 - AVL stromy
Téma - AVL stromy
- přidávání
- vyvažování (bf - balance factor a výška; rotace)
- mazání
- AVL stromy jsou první zápočtový úkol (více informací zde)
Písemka
- Příště nás čeká první písemka
- Více informací zde
Úkoly
- Implementujte AVL strom pro ukládání čísel typu
int
. - Závazné rozhraní (proti němu budu kód testovat):
- typ
AVLTree
pro AVL strom reprezentovaný kořenem - procedury:
AVLTree* avl_create()
vytvoří nový prázdný AVL strom.int avl_add(AVLTree *tree, int data)
přidává prvek do stromu. Vrací 1 pokud byl prvek přidán a 0 jinak. Nepovolujte duplicitní hodnoty.int avl_search(AVLTree *tree, int data)
vyhledává prvek ve stromě. Vrací 1 pokud byl prvek nalezen a 0 jinak.int avl_delete(AVLTree *tree, int data)
maže prvek ze stromu. Vrací 1 pokud byl prvek smazán a 0 jinak.int avl_height(AVLTree *tree)
vrací výšku stromu.void avl_in_order_print(AVLTree *tree)
vypisuje strom in order průchodem.
- typ
Doporučený postup:
- Implementujte vhodné struktury pro AVL strom (můžete vhodně modifikovat struktury, které máte z BST).
- Implementujte pomocné procedury pro udržování výšky AVL stromu - rotace.
- Implementujte vyhledávání prvku v AVL stormu a přidávání prvku do AVL stromu (s využitím rotací z předchozího bodu).
- Implementujte počítání výšky stromu a in order výpis stromu (stejné jako u BST).
- Implementujte odebírání prvků z AVL stromu (s využitím kódu z předchozích bodů).
Poznámky:
- Dávejte pozor na složitost implementovaných procedur. Zejména u manipulací se stromem (přidávání, mazání, hledání).
- Taková implementace se dá snadno použít pro efektivní reprezentaci (operace v O(log(n))) množiny čisel typu
int
. Jak?