2016-12-05 9 views
0

У меня есть BST, в котором есть записи, содержащие ключ и строку. Я создал дерево и заполнил его значения и хочу скопировать его значения в другое дерево. Единственными функциями, которые у меня есть, являются общие двоичные функции дерева поиска и итераторы Begin() и End().Двоичное дерево поиска - копирование одного дерева в другое дерево

Как это сделать без использования прямой функции копирования, т.е. Копировать (T1, T2)?

Я просто ищу теоретически, а не фактическую реализацию кода.

+0

Вы хотите скопировать значения из одного дерева T1 в существующее дерево T2, где T2 уже содержит значения? Или вы просто хотите, чтобы функция копирования дерева создавала новое дерево T2 с существующими значениями T1? – Jan

+0

Вам нужно объяснить, что вы подразумеваете под «копировать свои значения в другое дерево», «общие двоичные функции дерева поиска» и «прямая функция копирования» --- все эти понятия неоднозначны. – rolevax

ответ

1

Если единственные функции, которые у вас есть, - это поиск, вставка, удаление, запуск итератора и завершение итератора, то это похоже на то, что единственным вариантом будет перебрать первое дерево, индивидуально вставив каждое значение в дерево назначения. Но будьте осторожны, если эти итераторы возвращают элементы по порядку, а ваши деревья не балансируют самостоятельно, тогда при копировании результирующее дерево будет палкой. (т. е. он будет полностью неуравновешен.) Если ваши итераторы возвращают значения 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, и любой из этих заказов на вставку будет воспроизводить исходное дерево.