Sconsiglio vivamente l'uso di etichette e Goto, che rendono il blocco di codice poco leggibile e soprattutto non manifestano apertamente il ciclo che deve essere eseguito.

Ad ogni modo, io ho creato nodi all'interno di un controllo TreeView in questo modo:
codice:
' Blocca l'aggiornamento visuale del controllo
demoTreeView.BeginUpdate()
Try
	' Elimina tutti i nodi presenti nella struttura
	demoTreeView.Nodes.Clear()
	' Esegue un ciclo di nodi genitori
	Dim i As Integer
	For i = 1 To 100
		Dim parentNode As TreeNode = New TreeNode(i.ToString())
		demoTreeView.Nodes.Add(parentNode)
		' Esegue un ciclo per i nodi figli
		Dim j As Integer
		For j = 1 To 10
			Dim childNode As TreeNode = New TreeNode(j.ToString())
			parentNode.Nodes.Add(childNode)
		Next
	Next
Finally
	' Sblocca l'aggiornamento visuale del controllo
	demoTreeView.EndUpdate()
End Try
Si tratta ovviamente di creare nodi non significativi, con valori di prova. A differenza del tuo codice, quando creo un nodo da aggiungere alla struttura, ne memorizzo il riferimento nella variabile parentNode: in questo modo, evito di ricercare nuovamente all'interno della struttura il nodo genitore per i nodi figli che mi sto accingendo a creare in modo analogo, i quali vengono poi inseriti nella proprietà Nodes del nodo padre parentNode.

Questo principio si applica bene però se i dati giungono ordinati e suddivisi per categoria.

Nel caso in cui tu abbia dati mescolati i quali vanno messi ognuno nel proprio nodo di appartenenza, ti basterebbe usare il nome delle categoria acquisito per individuare il relativo nodo e, una volta reperito il riferimento a tale nodo, utilizzare la proprietà Nodes per aggiungere i nodi figli. Esemplifico:
codice:
' Blocca l'aggiornamento visuale del controllo
demoTreeView.BeginUpdate()
Try
	' Elimina tutti i nodi presenti nella struttura
	demoTreeView.Nodes.Clear()
	' Esegue un ciclo per creare i nodi "genitori"
	Dim i As Integer
	Dim j As Integer
	For i = 1 To 100
		demoTreeView.Nodes.Add(New TreeNode("Nodo " + i.ToString()))
	Next
	' Esegue un ciclo per creare i nodi "figli"
	For i = 1 To 100
		Dim parentName As String
		Dim parentNode As TreeNode
		
		' Cerca il nodo "padre"
		' (meglio usare un Enumerator)
		parentName = "Nodo " + i.ToString()
		parentNode = Nothing
		For j = 0 To demoTreeView.Nodes.Count - 1
			If demoTreeView.Nodes(j).Text = parentName Then
				parentNode = demoTreeView.Nodes(j)
			End If
		Next
		
		' Genera i nodi "figli"
		If Not(parentNode Is Nothing) Then
			For j = 1 To 10
				parentNode.Nodes.Add("Figlio " + j.ToString())
			Next
		End If
	Next
Finally
	' Sblocca l'aggiornamento visuale del controllo
	demoTreeView.EndUpdate()
End Try
Non è il massimo delle performance, ma funziona.

Concludendo, credo che la soluzione migliore sia quella di reperire i dati in forma già ordinata per categoria di appartenenza, in modo da poter aggiungere il nodo padre e, tenendo memorizzato un riferimento ad esso, aggiungere tutti i nodi figli per passare poi alla categoria e al rispettivo nodo padre successivi.

Ciao!