2016-08-03 5 views
0

Ich bin zu VB.Net neu und ich bin bei einem Problem fest. Ich habe einen Multi-Baum. Wurzel hat viele Kinder und selbst diese Kinder haben viele andere Kinder. Ich möchte den Multi-Baum durch Rekursion durchlaufen. Ich konnte online nicht viele Informationen finden. Kann mir jemand helfen? Vielen Dank!Wie man einen multi Baum in vb.net durchquert

Unten ist das, was ich erreichen will:

Mein Objekt, das ich über REST senden müssen:

Imports Microsoft.VisualBasic 

<DataContract> 
Public Class DropdownObj 

    <DataMember(Name:="name")> 
    Private dropdownData As String 
    Public Property name() As String 
     Get 
      Return dropdownData 
     End Get 
     Set(ByVal value As String) 
      dropdownData = value 
     End Set 
    End Property 

    <DataMember(Name:="id")> 
    Private _id As Integer 
    Public Property id() As Integer 
     Get 
      Return _id 
     End Get 
     Set(ByVal value As Integer) 
      _id = value 
     End Set 
    End Property 

End Class 

Actual REST:

tmpGroups = SMS_Logic.Group.LoadGroupsForCombo(_currentUser.dsDir().Group, _currentUser.dsDir().Group_Group, _currentUser.dsDir().Location) 

    Dim x As Integer 
    x = tmpGroups.Count() 
    Dim temp As New List(Of DropdownObj) 
    For objCount As Integer = 0 To tmpGroups.Count - 1 
     Dim xobj As New DropdownObj 
     xobj.name = tmpGroups(objCount).Description 
     xobj.id = tmpGroups(objCount).GroupID 
     temp.Add(xobj) 
     Console.WriteLine(tmpGroups(0).Description) 
    Next 
    Return temp 
End Function 

So tmpGroups hat die ganze Wurzel und verzweigt sich dann zu chil dren. Ich brauche nur ein paar Werte, und offensichtlich muss ich durchqueren, um diese Werte zu erhalten. Nachdem ich diese Werte erhalten habe, muss ich sie als REST Service an das Frontend senden. Im obigen Code konnte ich nur alle Wurzeln erhalten, wenn ich nur eine Schleife verwendete. Aber es ist eine Baumstruktur, und ich muss all das durchqueren und die Werte entsprechend dem neuen Baum hinzufügen oder etwas, das ich an mein Frontend weitergeben kann.

+0

Bitte zeigen Sie uns, was Sie getan haben, um das Problem zu lösen. – DVK

+0

Ich habe ein Code-Snippet hinzugefügt, was ich erreichen möchte. – Unbreakable

Antwort

2

Etwas, das du alleine machen solltest, aber hier ist es sowieso. Ich sage das, denn wenn ich eine neue Sprache lerne, ist Rekursifizierung wahrscheinlich das Erste, was ich versuche zu implementieren, und es ist aufregend und ermutigend, wenn ich es beende.

Private Shared Sub HandleNode(ByVal node As Object) 
    'Do the work on the node before child-nodes. 

    For Each child As Object In node.Children 
     HandleNode(child) 
    Next 

    'Do the work on the node after child-nodes. 
End Sub 

Es kann von Bedeutung sein, wenn Sie Ihre Arbeit an dem aktuellen Knoten vor oder nach den Kindern erledigen. Etwas, das man im Kopf behalten sollte.

+0

Ich habe mein Code-Snippet hinzugefügt. Kannst du es mal anschauen, vielen Dank! – Unbreakable

+0

Es wird auch Multi-Tree iterieren? Ich meine, wenn eine Wurzel viele Kinder hat. und sogar dieses Kind hat viele Kinder als Gegenleistung. Freundliche Anleitung. – Unbreakable

+0

@ Unbreakable: Ja wird es. Die Methode, die von RoyalPotato bereitgestellt wird, iteriert durch jedes untergeordnete Element im aktuellen Knoten, und dann ruft sie die Methode erneut für jedes dieser untergeordneten Elemente auf. So wird es für jedes Kind und seine Kinder dasselbe tun, bis es keine mehr gibt. –