recursivo - Error de segmentación en el código para encontrar(en orden) el sucesor de los nodos en el árbol binario
grado de un arbol (1)
Considera este fragmento:
if(xptr!=NULL)
{
printf(" %d is the successor of %d/n",a->x,xptr->x);
}
else
printf("%d is the scuccessor of no one/n",xptr->x);
siempre que xptr
sea null
, el control ingresa a la parte else
e intenta imprimir xptr->x
que está xptr->x
un puntero nulo ( null->x
). De ahí la falla de segmentación.
Creo que escribiste esto por error:
printf("%d is the successor of no one/n",xptr->x);
que en mi opinión debería ser:
printf("%d is the successor of no one/n",a->x);
Estaba tratando de encontrar / imprimir el sucesor inorder de cada nodo en un árbol binario pero el compilador me está dando un fallo de segmentación como resultado.
Aquí está la estructura:
struct node
{
int x;
struct node *left;
struct node *right;
};
Condición inicial:
Pasé la raíz del árbol como
a
(ensucc()
) y punteroNULL
comob
.
Aquí está mi código para imprimir / encontrar el sucesor:
struct node *(succ(struct node *a,struct node *b))
{
struct node *xptr;
xptr=b;
if(a!=NULL)
{
xptr=succ(a->left,xptr);
if(xptr!=NULL)
{
printf(" %d is the successor of %d/n",a->x,xptr->x);
}
else
printf("%d is the successor of no one/n",xptr->x);
xptr=a;
if(xptr->right==NULL)
{
return xptr;
}
xptr=succ(a->right,xptr);
return xptr;
}
else
return xptr;
}
He probado el resto del código (construyendo el árbol) y está funcionando bien.