Foro: Dudas y Consultas

Consulta tp8

Consulta tp8

de Usuario eliminado -
Número de respuestas: 1

Buenas profe, 

 Punto3 f y h: no estoy muy seguro de cual seria mi error

bool similar (pnodo a, pnodo b){
if (a==NULL && b==NULL)
return true;
else{
if (a!=NULL && b!=NULL && a->izq==b->izq && a->der==b->der)//aquí no puedes preguntar por la igualdad ya que cada dirección a la que apunta cada puntero es diferente, aquí sólo puedes manejarte con el !=NULL para cada caso, sin embargo te conviene separar las condiciones o bien preguntar por el caso del falso, ya que de acuerdo a tu condición obligarías que sea un árbol completo y además apuntando a las mismas direcciones
return similar(a->izq,b->izq) && similar(a->der,b->der);
else
return false;
}
}

//para las funciones lógicas te conviene plantear correctamente las condiciones para los casos bases true y false y luego la RRC, de ese modo simplificarás las condiciones 

//para que a->izq==b->izq ambos deberían apuntar al mismo nodo, lo que no te sirve, ya que de lo contrario estarías recorriendo uno solo.

int cant_nodos_1hijo(pnodo a){
int h;
if(a==NULL)
h=0;
else
if((a->izq==NULL && a->der!=NULL) && (a->izq!=NULL && a->der==NULL))//esta condición no se cumpliría nunca, deberían estar unidas por || ya que o tendrá el brazo izquierdo o el brazo derecho
h=cant_nodos(a->izq)+cant_nodos(a->der)+1;
else
h=cant_nodos(a->izq)+cant_nodos(a->der);
return h;
}

punto 4: estarian bien

a_

typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo izq;
pnodo der;
pnodo central;
};

d_

int cant_nodos(pnodo a){//válido
if(a==NULL)
return 0;
else
return cant_nodos(a->izq)+cant_nodos(a->der)+cant_nodos(a->central)+1;
}

e_Como seria para lo de central?

void busqueda(pnodo a, int busqueda){
bool encontrado=false;
if(a!=NULL){
if(a->dato==buscado)
encontrado=true;
else
if(buscado>a->dato)//en esta búsqueda te convendría en todo caso recorrer todo el árbol sin considerar un orden, deberías basarte en el recorrido más que nada, que primero busque por izquierda si no lo encontró que vaya por central y si aún no lo encuentra recién por derecha, en el caso de optimizar
encontrado=busqueda(a->izq,buscado);
else
encontrado=busqueda(a->der,buscado);
}
return encontrado;
}

6_a

void agregar(pnodo &a, pnodo nuevo){//valido
if(a==NULL)
a=nuevo;
else
if(nuevo->dato==a->dato){
cout<<"Valor repetido"<<endl;
delete(nuevo);
}else{
if(nuevo->dato < a->dato)
agregar(a->izq,nuevo);
else
agregar(a->der,nuevo);
}
}

8_c cual seria mi error?

int cant_vocales(pnodo a){
if(a==NULL)
return 0;
else
if(a->dato=='A' || a->dato=='E' || a->dato=='I' || a->dato=='O' || a->dato=='U') //podrías incluir también las minúsculas
return cant_nodos(a->izq)+cant_nodos(a->der)+1; //tienes mal el nombre de la función dice nodos no vocales
else
return cant_nodos(a->izq)+cant_nodos(a->der);
}

10_d

void contar(pnodo a, int &p, int &c, int &pc){//válido
if(a!=NULL){
if(primo(a->dato) && capicua(a->dato))
pc++;
else
if(primo(a->dato))
p++;
else
if(capicua(a->dato))
c++;
contar(a->izq);
contar(a->der);
}
}

(Editado por Verónica Torres - envío original domingo, 22 de octubre de 2023, 01:03)