C++. Как спроектировать наследование Дерева Поиска в АВЛ
Ломаю голову над тем, как правильно реализовать АВЛ-дерево на основе существующего бинарного поиска.
Есть шаблонный класс Узел, который хранит ключ и данные узла (некий словарь), указатели на поддеревья.
template <class T>
class Node
{
private:
T _data;
int _key;
Node* _left, * _right;
public:
friend class BinaryTree<T>;
}
Сам же шаблонный класс Дерево хранит указатель на корень и инварианты древа.
template <class T>
class BinaryTree
{
private:
Node<T>* _root;
int _height,
_order;
}
Так вот, я хотел бы унаследовать это дерево, просто переопределив добавление, удаление (сделав функции виртуальными). Да и логично это - АВЛ это то же дерево, с единственным отличием - оно всегда сбалансировано.
Но возникает проблема - класс Узел. Для АВЛ дерева он должен содержать высоту относительно корня, для БДП это излишне, и как разрешить эту коллизию без костылей - я не знаю.