@children is an instance variable. children is a local variable.

>  I don't understand why "@children = children" is
> needed, couldn't the code just use "children"?

children will go out of scope at the end of the call to initialize.
@children won't.

> Am I right to think that
> the names of these two objects are inconsequential? What are we doing
> here? I'm guessing making instances of attr_accessor and naming them
> "children" and "node_name"?

Please read this: http://www.raulparolari.com/Ruby2/attr_accessor