Counting unival subtrees - Follow Up
Good job - it's nice to see improvements from the reviews you've received.
I would recommend using logical &amp;&amp; rather than bitwise &amp; in the computation r &amp;node-&gt;value == parent-&gt;value.  Results should be the same, but programmers expect to see logical operators with boolean values.
The computation of r cannot use &amp;&amp; as is, because the right-hand side does need to be evaluated for its side-effects, even when the left-hand side is false.  I'd consider rewriting as separate expressions, so a future maintainer doesn't &quot;correct&quot; the &amp; to &amp;&amp;:
bool l_un = isUnivSubTimpl(node-&gt;left, node, count);  /* updates *count */
bool r_un = isUnivSubTimpl(node-&gt;right, node, count); /* updates *count */
bool r = l_un &amp;&amp; r_un;

Identifiers beginning with is are reserved for Standard Library extension, so I'd advise changing the name isUnivSubTimpl, particularly as it has external linkage.
It isn't clear to me why freeTree() returns a bool, as it only ever returns true.
Building the tree could be simplified a little with
stTree *createLeafNode(int value)
{
    return createNode(value, NULL, NULL);
}