Шрифт:
Поскольку ключ хранится в члене класса
Иначе говоря, для каждого узла выполняются два условия.
• Ключ его левого подузла меньше ключа узла.
• Ключ узла меньше, чем ключ правого подузла.
В узле могут храниться дополнительные данные, которые контейнер может использовать для поддержки баланса. Дерево считается сбалансированным, если каждый узел имеет примерно одинаковое количество наследников как слева, так и справа. Если дерево, состоящее из N узлов, сбалансировано, то для обнаружения узла необходимо просмотреть не больше log2N узлов. Это намного лучше, чем N/2 узлов в среднем, которые мы должны были бы просмотреть, если бы ключи хранились в списке, а поиск выполнялся с начала (в худшем случае линейного поиска нам пришлось бы просмотреть N узлов). (См. также раздел 21.6.4.)
Для примера покажем, как выглядит несбалансированное дерево.
Это дерево по-прежнему удовлетворяет критерию, требующему, чтобы ключ каждого узла был больше ключа левого подузла и меньше ключа правого.
И все же это дерево является несбалансированным, поэтому нам придется совершить три перехода, чтобы найти узлы Apple и Kiwi, вместо двух, как в сбалансированном дереве. Для деревьев, содержащих много узлов, эта разница может оказаться существенной, поэтому для реализации контейнеров
Разбираться в принципах организации деревьев, используемых для реализации контейнера
Настоящий вариант контейнера определен в заголовке
Сходство интерфейсов классов