For example:
Head init(){ Head treeHead; treeHead = malloc(sizeof (struct TreeHead)); treeHead->Root = malloc(sizeof (struct TreeNode)
I would define a function in A.c:
void freeHead(Head head){ free(head->Root); free(head); return; }
Then call it in appropriate places in B.c:
freeHead(head);