#define NULL 0 typedef struct noeud { struct noeud *gauche, *droite; } noeud, *noeudptr; marquer(noeudptr P, noeudptr M, noeudptr *L) { /* parcourt la partie de la structure accessible de P; * (sauf les parties accessibles uniquement par un noeud marque); * marque les noeuds rencontres par un M dans champ gauche; * ajoute des pointeurs vers les noeuds rencontres et non * deja marques dans la liste pointe par L * et chaine par les champs droite */ if (P) if (P->gauche!=M) { noeudptr temp=*L; *L=(noeudptr) malloc(sizeof (noeud)); (*L)->gauche=P; (*L)->droite=temp; temp=P->gauche; P->gauche=M; marquer(temp,M,L); marquer(P->droite,M,L); } } void liberer( noeudptr p) { noeudptr liste=NULL, nouveau, prochain; nouveau= (noeudptr) malloc(sizeof (noeud)); /*nouveau n'est pas dans la structure a liberer*/ marquer(p, nouveau, &liste); for (;liste;liste=prochain) { prochain=liste->droite; free(liste->gauche); free(liste); } } main() { }