Baum traversal in Java
Studiere ich für ein Vorstellungsgespräch und war die überprüfung Bäume, ich habe kein problem beim durchqueren Sie, aber ich habe eine Frage, die ich nicht in der Lage, Bild die richtige Antwort an:
Schreiben Sie eine Funktion zurückgibt, die einen Knoten in einem Baum mit zwei Parametern:
Zeiger auf den Wurzelknoten und die inorder-Traversierung Anzahl der Knoten
wollen wir wieder zurück. Die einzige information, gespeichert in dem Baum ist das
Anzahl der Kinder für jeden Knoten.
So weit, ich habe noch nicht einmal in der Lage zu Bild, warum ich die Pflege der gespeicherten Informationen in der Struktur (die Anzahl der Kinder). Andere als, dass, wenn wir annehmen, dass es ein Baum wie:
5
4 7
3 1 4
dann die Inorder traversal wäre 341547
aber ich kann nicht herausfinden, den code zurück zu dem Knoten, ich will (aus Gründen der argument ich gehe davon aus, dass die inorder traversal-Nummer 2 - das heißt, ich will den Knoten mit dem Wert 1).
Ich habe versucht zu tun, eine rekursive Traversierung, aber ich am Ende einen das einschrauben der inneren Zähler, die ich hatte, also versuchte ich einen anderen Ansatz und versucht nur, alles auf einem Stapel, aber ich kann nicht herausfinden, wie man richtig tun. Bisher habe ich:
public int findNode(root, position){
Stack<Integer> s = new Stack<Integer>();
cNode = root; //cNode = current Node
while(cNode.left != null)
cNode = cNode.left;
s.push(cNode);
while(cNode.right != null)
cNode = cNode.right;
//stuck here.
}
Den rekursiven Ansatz war leichter, aber ich kann nicht herausfinden, wie um zu überprüfen, ob ich die # ich bin auf der Suche nach:
public int findNode(root, position){
cNode = root;
if(cNode != null){
findNode(cNode.left, position);
System.out.print(cNode.data);
findNode(cNode.right, position);
}
}
Ich weiß, dieser durchläuft den Baum, aber es immer noch nicht genau das tun, was ich will. Jede Hilfe würde geschätzt werden.
"Schreiben Sie eine Funktion, die zurückgibt ein Knoten in einem Baum zwei Parameter" ein Knoten im Baum, welcher Knoten? ein Knoten, der den jeweiligen Wert ODER Knoten an einem bestimmten index (der index, wie in inorder traversal)???
InformationsquelleAutor Tsundoku | 2012-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie es tun, wie Z:
Hinweis: Sie brauchen nicht, um eine zusätzliche Daten-Struktur, wenn Sie nicht wollen, aber da Sie hatte einen Stapel ich ging einfach mit.
Note2: Als Jim Garrison wies darauf hin, Sie optimieren den Algorithmus, wenn Sie die Nachfahren zählen.
InformationsquelleAutor Daniel Moses
Die Frage ist mehrdeutig. "Inorder" ist sinnvoll für binäre Bäume, in dem Fall "Anzahl der Kinder" immer zwei, es sei denn, Sie bedeuten "Anzahl Nachkommen", in dem Fall könnten Sie verwenden, um zu vermeiden, tun eine lineare Suche durch die inorder-Liste (A*n) da an jedem Knoten können Sie entscheiden, welcher Zweig zu nehmen (O*log n), basierend auf der Anzahl der Nachkommen.
Was meinst du mit "fehlt ein Kind". Ein binärer Baum muss nicht vollständig ausgefüllt sein.
InformationsquelleAutor Jim Garrison
Anstatt die position, vorbei an der inorder traversal Anzahl und append in jedem rekursiven Methode.
InformationsquelleAutor Erik B
Ist es besser, reduzieren Sie die Komplexität des Algorithmus durch die Verwendung der Eigenschaft des Baumes, die kennt jeder Knoten die Anzahl der Kinder, die es hat. So ermitteln Sie die Bestellnummer des aktuellen Knotens, wenn Sie wissen, wie viele Kinder es hat auf der linken Seite (für root wird es nicht sein. der Kinder auf der linken + 1) Der folgende code sollte funktionieren:
Komplexität dieses Algorithmus ist O(log n)
InformationsquelleAutor mayank_hey