I'm not a tree hugger or any way expert in the use of trees. However, when I do venture into the forest I usually use a node with at least two, and often three node pointers.
struct node
{
//non-node pointer member variable(s) here
//node pointer member variables here
node * rightChild;
node * leftChild;
}; That's using C++ struct syntax, which you can modify to your own needs in C. A leaf is any node where both rightChild and leftChild are NULL. Hopefully you recognize that a tree with only 1 child pointer as a member variable is basically a list, though if you stayed in the tree analagy you might call it a branch or a twig instead.
I've seen both stacks and node pointers to parent nodes to assist with backtracking and thus traversing the tree. Using stacks decreases the size of each node, since there is one less pointer per node, which is helpful if the tree is large.
BTW, if malloc() returns NULL I believe that means that the computer doesn't have the memory to hold another new node, not that the tree is full.