Guarda ho provato a farlo in uno stato di morte apparente, fai un po' due prove anche se comunque dovrebbe andare (INT_MAX è una costante definita in limits.h; la funzione min serve a trovare il minimo tra tre numeri, volendo si può riscrivere con una semplice sequenza di if-then-else, e può essere anche una macro).
codice:
int min(int a, int b, int c)
{
return a < b ? (a < c ? a : c) : (b < c ? b : c);
}
int tree_min(node *root)
{
/* empty node */
if (root == NULL) {
return INT_MAX;
}
/* leaf node */
if (root->sx == NULL && root->dx == NULL) {
return root->info;
}
return min(tree_min(root->sx), tree_min(root->dx), root->info);
}
dove la struttura del nodo si può dedurre facilmente:
codice:
typedef struct node {
int info;
struct node *sx;
struct node *dx;
} node;
Alla fine poteva andare bene anche come l'hai fatta tu, solo che avresti dovuto innanzitutto restituire qualcosa anche nel "caso base", cioè quando la radice è NULL (altrimenti la funzione restituisce valori "casuali" essendo comunque di tipo int) e poi il confronto finale andrebbe fatto appunto a tre (comprendendo conf), non solo tra min1 e min2.