Curso 2023/2024
Piensa cuáles son los errores en las siguientes soluciones incorrectas.
vector<int> Conjunto::obtenerOrdenados() const { vector<int> v(laTalla); obtenerOrdenados(raiz, v, 0); return v; } void Conjunto::obtenerOrdenados(Nodo * n, vector<int> & v, int i) const { if (n != nullptr) { obtenerOrdenados(n->izquierdo, v, i); v[i++] = n->dato; obtenerOrdenados(n->derecho, v, i); } }
Al no pasar i
por referencia, lo que se incremente es una copia que no ven todas las llamadas.
vector<int> Conjunto::obtenerOrdenados() const { vector<int> v(laTalla); obtenerOrdenados(raiz, v, 0); return v; } void Conjunto::obtenerOrdenados(Nodo * n, vector<int> & v, int & i) const { if (n != nullptr) { obtenerOrdenados(n->izquierdo, v, i); v[i++] = n->dato; obtenerOrdenados(n->derecho, v, i); } }
No podemos pasar un valor constante (en este caso, 0) en un argumento por referencia.
vector<int> Conjunto::obtenerOrdenados() const { vector<int> v(laTalla); int i = 0; return obtenerOrdenados(raiz, v, i); } void Conjunto::obtenerOrdenados(Nodo * n, vector<int> & v, int & i) const { if (n != nullptr) { obtenerOrdenados(n->izquierdo, v, i); v[i++] = n->dato; obtenerOrdenados(n->derecho, v, i); } }
Sobra return
donde está, porque el segundo método no
devuelve nada, no podemos devolver con return
lo que no
devuelve, y falta return v
(solamente al final del primer
método).