* is both a binary and a unary operator in C and it means different things in different context.
Based on the code you have provided:
*leaf = (struct node*) malloc( sizeof( struct node ) );
Here the void * (void pointer) that malloc returns is being casted to a pointer to struct node, I don’t recommend this, for more information read this
I can guess if you see the declaration of leaf it will be like this:
struct node ** leaf; //declares a pointer to a pointer of struct node
leaf = malloc(sizeof(struct node *) ); //allocate enough memory for pointer
//remember to not cast malloc in C
At this point *leaf is the pointer to struct node where the * is acting as a dereference operator.
1
solved Basic C pointer syntax [closed]