Cela dépend fortement de ta structure d'arbre, il faudrait que tu me la donnes. A priori il s'agit simplement de faire un parcours récursif de ton arbre et d'examiner le noeud visité pour voir s'il correspond à ce que tu cherches.
Un exemple pour t'inspirer :
typedef struct _noeud_t{
unsigned id; // l'identifiant d'un noeud
unsigned nb_fils; // le nombre de noeud fils
struct _noeud_t ** fils; // les noeuds fils (un tableau de pointeur sur chaque noeud fils)
} noeud_t;
typedef noeud_t * arbre_t;
void afficher_arbre(arbre_t a){
unsigned i;
printf("noeud %d\n",a->id);
// appel récursif
for(i=0;i<a->nb_fils;++i) afficher_arbre(a->fils[i]);
}
Dans ton cas il suffit d'interrompre les appels récursifs dès que tu as trouvé le noeud qui t'intéresse :
int chercher_noeud(arbre_t a,unsigned id,struct _node_t ** p){
unsigned i,trouve = 0;
// Le noeud courant est le noeud recherché
// *p pointe sur le noeud recherché.
if(id == a->id){
*p = a;
return 1; // trouvé (on remonte la valeur 1)
}
// On visite les noeuds fils du noeud courant à la recherche du noeud id
// Si le noeud cherché si trouve, l'appel récursif basculera la valeur 0
// Si c'est une feuille on n'entre pas dans la boucle for et on remonte la valeur 0
for(i=0;i<a->nb_fils && !trouve;++i) trouve = chercher_noeud(a->fils[i],id);
return trouve;
}
Bonne chance