(1)
ArrayList<TreeNode> children;
declares an object called "children" with type "ArrayList<treenode>" where ArrayList is a particular collection of objects, in this case all those objects must be instances of type TreeNode. So children will be a bunch of TreeNode instances.
That by itself does not make a tree. However if every TreeNode in the collection has sufficient information about either its parent or its children, then you can discover the tree structure in that collection of TreeNodes.
(2)
I don't see much value in your comments; The "this is a table, this is a chair" approach doesn't add much. IMHO there mainly are two kinds of comment really worthwhile:
[A] at the start of a class or a method, describe what it is going to do, in functional terms, with input requirements, results to be expected, assumptions made, limitations, etc. That is akin to a contract.
aim: you or anyone else can at any point in time start using the class/method without having to study the implementation.
[B] inside a method, explain what algorithm is used, provide a reference, explain why you are doing things the way you are doing them; but only when such is not obvious.
aim: you or anyone else, when interested in the internals (e.g. when functionality needs to be added, or performance needs improved), gets a kick start.
Warning: maintain your comments meticulously; there is nothing worse than wrong comments. People are inclined to read and believe comments and get blinded by them when the code does not agree with the comment. It is better to have no comment than wrong or ambiguous comments.
:)