This method should walk the tree recursively. The standard implementation gracefully handles shared nodes, including cyclical references. However, there can only be one GoLayoutTreeNode.Parent per node. If a node is declared to be the child of multiple nodes, it is not guaranteed which node wins as the parent node. If any of the children of this node are in the Roots collection, they are removed from that collection.