What does the following function do for a given binary tree?
int f(struct node *root) { if (root == NULL) return 0; if (root->left == NULL && root->right == NULL) return 0; return 1 + f(root->left) + f(root->right); }