Introduction - If you have any usage issues, please Google them yourself
This representation is a bit annoying because the kids array must be allocated separately from the node, and you need to reallocate the kids array every time you add a new kid to a node. Alternatively, you could instead over-allocate in anticipation of more nodes being added, but then you have to record the array capacity within the node. (The latter representation is exactly what I used for the tree of stack traces in Massif.)
struct t {
int n
struct t *kids
struct t *siblings
}