First one, no.
Second one, yes.
For each node that contains children you will need to add the following code during population.
objTreeNode.JSFunction = "checkAllChildren(""" & objTreeNode.Key & """)"
Then in your js file you will need something lithe following.
function
checkAllChildren(sId){
var oTree = dnn.controls.controls['MyDNNTree'];
var oTNode = oTree.selTreeNode;
for (var i=0; i<oTNode.node.childNodeCount(); i++)
{
var oNewNode = new dnn.controls.DNNTreeNode(oTNode.node.childNodes(i));
oTree.selectNode(oNewNode);
}
}
Note: A recursive call is not necessary, since the selection of a node that contains children will invoke its own function call. Also note that I have hardcoded the name of my tree control in this script (MyDNNTree). This is not adviseable for a real module, you will need to determine the name via the ClientID property on the server-side.
If you have any questions feel free to contact me.