У меня есть двоичное дерево T, которое я хотел бы скопировать в другое дерево.
Предположим, у меня есть метод посещения, который оценивается на каждом узле:
struct visit
{
virtual void operator() (node* n)=0;
};
и у меня есть алгоритм посетителя
void visitor(node* t, visit& v)
{
//do a preorder traversal using stack or recursion
if (!t) return;
v(t);
visitor(t->left, v);
visitor(t->right, v);
}
У меня есть 2 вопроса:
- Я остановился на использовании подхода, основанного на функторе, потому что я вижу, что граф повышения делает это (посетители вершин). Также я склонен повторять один и тот же код, чтобы пройтись по дереву и делать разные вещи
на каждом узле. Это хороший дизайн, чтобы избавиться от дублированного кода? Какие еще есть альтернативные конструкции?
- Как я могу использовать это для создания нового двоичного дерева из существующего? Я могу держать стек на
Посетите функтор, если хотите, но он привязан к алгоритму в посетителе.
- Как бы я включил здесь обходы после заказа? Еще один класс функторов?