El problema es que...
por cada nodo tienes que enviar a hacer el filtro, para agregarle sus hijos... y a esos hijos tambien agregarle sus hijos...lo que sugiere una funcion recursiva...
No se si se podrá implementar de forma no recursiva...pero si te sirve te anexo un link donde se implementa de forma recursiva el llenado...
Llenar un TreeView desde un DataSet en VB .NET
Espero te sirva...