/* * tree_dictionary.cpp * * Created on: 23.01.2014 * Author: trifon */ #include "dictionary.h" #include "avl_tree.cpp" template class TreeDictionary : AVLTree >, public Dictionary { private: void collectKeys(LinkedList& keys, BinaryTreeIterator > > it) const { if (!it) return; collectKeys(keys, ++it); keys.toEnd((*it).data.key); collectKeys(keys, it++); } public: // O(log n) V* search(K const& key) { KeyValuePair kvp(key); KeyValuePair* result = AVLTree >::search(kvp); if (!result) return NULL; return &result->value; } // O(log n) bool add(K const& key, V const& value) { KeyValuePair kvp(key, value); return this->insert(kvp); } // O(log n) bool remove(K const& key, V& value) { KeyValuePair kvp(key, value); return AVLTree >::remove(kvp); } // O(n) LinkedList keys() const { LinkedList result; collectKeys(result, this->iterator()); return result; } };