2 Stimmen

C# => Rekursiv eine Liste mit Listen abarbeiten, um das letzte Element zu erhalten

Ich habe einen Knoten1 mit einer Kinderliste. Diese Kinderliste kann mehrere Knoten haben, jeder hat seine Kinderliste und so weiter.

nod1
....Children
.......node2
.........Children
.......node3
.........Children
............node4
............node5

Ich brauche den Knoten 5, der sich in der Hierarchie ganz unten und ganz rechts befindet.

Wie kann ich diesen Knoten mit einer rekursiven Methode erhalten?

6voto

Ani Punkte 107342

Nun, da Sie um eine rekursiv Methode können Sie etwa so vorgehen:

public static Node GetRightMostLeaf(Node node)
{
    // Argument-checking omitted. You should possibly make this 
    // an instance-method on Node anyway.       

    return !node.Children.Any() ? node : GetRightMostLeaf(node.Children.Last()); 
}

Das äußerste rechte Blatt eines Knotens ist rekursiv definiert als das äußerste rechte Blatt seines zuletzt Kind. Der Basisfall ist ein Knoten ohne Kinder; in diesem Fall ist es das äußerste rechte Blatt.

Ein iterativer Weg wäre dies zu tun:

Node rightLeaf = node;

while(rightLeaf.Children.Any())
{
   rightLeaf = rightLeaf.Children.Last();
}

return rightLeaf;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X