class DeleterBase {
public:
DeleterBase() {};
virtual ~DeleterBase() {};
};
template<class T>
class Deleter : public DeleterBase
{
public:
explicit Deleter(T* ptr) : ptr_(ptr) {};
virtual ~Deleter() override {
delete ptr_;
}
private:
T* ptr_;
};
DeleterBase * hldr = new Deleter<A>(new A());
delete hldr;
Тут 0 - корень дерева. Почему он не подходит? Если приложить второое дерево к корню, то все вершины совпадут, только некоторые не будут листами. Т.е. вам надо именно по листьям прикладывать? Тогда на мой предыдущий вопрос ответ будет не "все поддеревья, у которых есть левый ребёнок", а все "все поддеревья, у которых есть левый ребёнок и он - лист". Так что же вам надо?