tree hierarchy with type parameter