2017-07-23 4 views
0

Diese Problemfrage bei Amazon Interview gestellt. Ich habe versucht, eine Lösung zu finden, aber ich habe keine Lösung gefunden. Jeder kann das Problem mit den Details lösen.Spiegelbild eines n-ären Baumes? Kann mir jemand erklären?

+0

Welche Art von Baum? Binary, n-ary oder etwas anderes? Nun, egal welches, das Duplikat sollte ein adäquater Ausgangspunkt sein. – Dukeling

+0

Rechts. Ich bin auf der Suche nach N-ari Baum. Ich habe meine Frage aktualisiert. Vielen Dank. –

+0

Ein Binärbaum ist ein Spezialfall eines n-ären Baumes. Der Code zum Spiegeln eines n-artigen Baums ist eine ziemlich einfache Erweiterung der Spiegelung eines binären Baums. –

Antwort

0

Dies ist eine ziemlich standardmäßige Interviewfrage.

Denken Sie über die Frage auf diese Weise nach, wenn Sie vor einem Spiegel mit Ihrem Baum standen, wie würde es aussehen. Ich würde Sie ermutigen, tatsächlich einen einfachen Baum zu zeichnen und vor dem Spiegel zu stehen und zu zeichnen, wie er aussieht.

Nachdem Sie dies getan haben, haben Sie vielleicht festgestellt, dass diese Frage fast identisch mit der Invertierung eines Baumes ist. Der Prozess der Inversion ist, auf jeder Ebene, den linken und den rechten Knoten zu vertauschen und weiter zu gehen, wenn und nur wenn der Kindknoten existiert.

Hier einige Pseudo-Code Ihnen den Einstieg:

invert_bst(bst): 
    bst's left node = bst's right node 
    if bst's left child is not null: 
     invert_bst(bst left child) 
    if bst's right child is not null: 
     invert_bst(bst right child) 

ich dringend, diese Lösung zu implementieren versuchen würde fördern.

Viel Glück bei Ihren zukünftigen Interviews!

+0

Danke für die Antwort. –

+0

Kein Problem, es hilft der Community im Allgemeinen, eine richtige Antwort zu markieren, wenn sie am Ende für Sie arbeitet! – PSub

0

Es ist ziemlich einfach, Spiegelbild bedeutet, dass der linke Knoten des ursprünglichen Knotens zum rechten Knoten für den Spiegelbildbaum wird. Sie können die Vorbestellung verwenden und den Knoten als links für das Original rechts für den Spiegel und rechts für das Original links für den Spiegel hinzufügen.

public Node createTreeMirror(Node root) { 
    if (root == null) { 
     return null; 
    } 
    Node mirror = new Node(root.data); 
    mirror.right = createTreeMirror(root.left); 
    mirror.left = createTreeMirror(root.right); 
    return mirror; 
} 
+0

Danke für den Lösungsansatz. –

Verwandte Themen