Как переопределить функцию в шаблоне с++?
Все свои SomeClassX породите от базового SomeClass  определенным виртуальным методом show, тогда шаблон не понадобится, просто в классе Tree в методе show(SomeClass t) напишите t->show() а сам show определите в каждом SomeClassX свой.
Можно через наследование:template<typename T>
class Tree: public T 
{
// ... здесь show объявлять не нужно
};
Или аггрегациюtemplate<typename T>
class Tree
{
  T _some;
public:
  void show()
  {
    _some.show()
  }
};