/* * avl_dictionary.cpp * * Created on: 8.01.2016 г. * Author: trifon */ #ifndef _AVL_DICTIONARY #define _AVL_DICTIONARY #include "dictionary.h" #include "avltree.cpp" template class AVLDictionary : AVLTree >, public Dictionary { private: using KVP = KeyValuePair; using AKVP = AVLElement; void collectKeys(BinaryTreePosition pos, LinkedList& keys) { if (pos) { collectKeys(-pos, keys); keys.insertEnd((*pos).data().key()); collectKeys(+pos, keys); } } void collectValues(BinaryTreePosition pos, LinkedList& values) { if (pos) { collectValues(-pos, values); values.insertEnd((*pos).data().value()); collectValues(+pos, values); } } public: // търсене V* lookup(K const& key) { KVP* result = AVLTree::search(key); if (result == NULL) return NULL; return &result->value(); } // вмъкване bool add(K const& key, V const& value) { return AVLTree::insert(KVP(key, value)); } // изтриване bool remove(K const& key) { return AVLTree::remove(key); } // списък от ключове LinkedList keys() { LinkedList result; collectKeys(BinaryTree::root(), result); return result; } // списък от стойности LinkedList values() { LinkedList result; collectValues(BinaryTree::root(), result); return result; } }; #endif