Если единственные функции, которые у вас есть, - это поиск, вставка, удаление, запуск итератора и завершение итератора, то это похоже на то, что единственным вариантом будет перебрать первое дерево, индивидуально вставив каждое значение в дерево назначения. Но будьте осторожны, если эти итераторы возвращают элементы по порядку, а ваши деревья не балансируют самостоятельно, тогда при копировании результирующее дерево будет палкой. (т. е. он будет полностью неуравновешен.) Если ваши итераторы возвращают значения pre-order или breadth first, тогда это не вызывает беспокойства.
E.g. Учитывая следующее дерево:
4
/\
/ \
2 6
/\ /\
1 3 5 7
Если итераторы возвращается последовательность 1, 2, 3 ... 7
, вставляя их в том порядке, в пустое дерево будет производить следующее:
1
\
2
\
3
\
4
\
5
\
6
\
7
Однако итераторы предварительного заказа будет возвращать 4, 2, 1, 3, 6, 5, 7
, и итераторы с первым дыханием вернутся 4, 2, 6, 1, 3, 5, 7
, и любой из этих заказов на вставку будет воспроизводить исходное дерево.
Вы хотите скопировать значения из одного дерева T1 в существующее дерево T2, где T2 уже содержит значения? Или вы просто хотите, чтобы функция копирования дерева создавала новое дерево T2 с существующими значениями T1? – Jan
Вам нужно объяснить, что вы подразумеваете под «копировать свои значения в другое дерево», «общие двоичные функции дерева поиска» и «прямая функция копирования» --- все эти понятия неоднозначны. – rolevax