Un árbol es un contenedor que tiene contenedores. Así, por ejemplo, tendríamos un nodo que contiene nodos del mismo tipo.
class CNodo
{
public:
std::vector<CNodo> hijos;
//constructor copia, asignación, etc...
};
Por ejemplo, con el siguiente código creo un árbol con cinco hijos:
CNodo arbol;
for (int i=0; i < 5; i++) {
arbol.hijos.push_back(CNodo());
}
// agregar dos hijos a cada nodo
vector<CNodo>::iterator iterIndex;
for (iterIndex = arbol.begin(); iterIndex != arbol.end(); iterIndex++) {
iterIndex->hijos.push_back(CNodo());
iterIndex->hijos.push_back(CNodo());
}
Al final del programa, tienes un árbol con cuyo primer nivel es de cinco hijos, y cada uno de estos tiene, a su vez, dos hijos.
Este es un ejemplo sencillo. Evidentemente no usa encapsulamiento ni programación genérica. Es más, ni siquiera guarda algún tipo de dato. Pero recoje bien la idea.
En este ejemplo, el contenedor lo implementé usando std:.vector, pero puedes emplear otro tipo de contenedores, como std::list, o alguno definido por tí.
Como alguien mencionó por ahí, también puedes emplear std::tree para ahorrarte el trabajo.
Saludos.