Я не знаю, что вы подразумеваете под "общим деревом". В любом случае сложность вставки в сбалансированное двоичное дерево составляет O(log n)
, где n
- количество элементов, находящихся в данный момент в дереве, поэтому построение полного дерева из некоторого списка элементов будет O(n log n)
, где n
- общее количество элементов, которые нужно вставить.
Вам также нужно будет указать время, необходимое для получения предметов из другого дерева. Это время зависит от типа дерева у вас есть. Ради аргумента я предполагаю, что вы можете пройти его за линейное время, поэтому получение данных из существующего дерева O(n)
.
Это делает вашу общую сложность времени O(n + (n log n))
.
Требуется дополнительное пространство n * sizeof(node)
, где sizeof(node)
- размер вашего узла двоичного дерева. Обратите внимание, что если элементы, хранящиеся в узлах «общего дерева», являются указателями, вам не придется оплачивать стоимость копирования реальных объектов - только накладные расходы узла двоичного дерева, который обычно составляет три указателя: данные, левая дочерняя ссылка и правая дочерняя ссылка.