Hablamos de esto, ¿no?
copia = new nodoAG ;
copia->dato = a->dato ;
copia->pH = copiaParcial (a->pH , k -1);
copia->sH = copiaParcial (a->sH , k );
En realidad no lo sabe, depende de que nosotros hagamos las cosas bien.
Por ejemplo en la llamada que tiene a->pH como parámetro, si confiamos en que la recursión funciona lo que se va a devolver es la copia de los primeros k - 1 niveles del árbol que tiene raíz en a->pH. Y eso se va a asignar al campo pH de copia.
O sea 'sabe' que es un primer hijo porque se lo estamos diciendo del lado izquierdo del operador de asignación.
Lo mismo para siguiente hermano.
¿No sé si queda claro?