Binary tree von Preorder und inorder traversal
Wie bekomme ich die Baumstruktur diese pre - /in-order-traversal:
Pre: A,B,D,E,C,F,G,H
in:E,D,B,A,G,F,H,C
BEARBEITET: MEINE Antwort
A
/\
B C
/ \
D F
/ /\
E G H
Ist das eine Hausaufgabe?
ja, das ist eine Hausaufgabe, aber ich brauche, um zu überprüfen, wenn ich die Lösung stimmt
So aufwendig, was du bisher getan habe. Sie fragte eine sehr Verwandte Frage, die vor vier Monaten hier stackoverflow.com/questions/4537969/... und so sollte man schon wissen, praktisch alles über binäre Suche Bäume.
Tucny ich werde meine Antwort also bitte sehen Sie die bearbeitete Frage.
ja, das ist eine Hausaufgabe, aber ich brauche, um zu überprüfen, wenn ich die Lösung stimmt
So aufwendig, was du bisher getan habe. Sie fragte eine sehr Verwandte Frage, die vor vier Monaten hier stackoverflow.com/questions/4537969/... und so sollte man schon wissen, praktisch alles über binäre Suche Bäume.
Tucny ich werde meine Antwort also bitte sehen Sie die bearbeitete Frage.
InformationsquelleAutor Bobj-C | 2011-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT:
Korrektur,
Du hast nicht die richtige Antwort, FGH ist auf der linken Seite von C.
Überprüfen, führen Sie einfach die zwei algorithmen vor:
Wissen Sie, dass ist die Wurzel, denn es beginnt die pre-order. Verwenden Sie die in-Reihenfolge zu ordnen Knoten Links und rechts von A. B ist der zweite Knoten (pre-order), und Links von Einer (in-order), und so weiter.
Wissen Sie, dass F,G,H ist Links von C wegen der in-order-Anordnung.
Grundsätzlich verwenden preorder wählen Sie den nächsten Knoten, und um zu sehen, ob es Links oder rechts vom übergeordneten Knoten.
EDIT (18 Apr 2011):
Zeigen, wie mechanischer Prozess ist, biete ich diesen pseudo-code:
Der trick ist, verwenden Sie die in-order-Reihenfolge, um zu bestimmen, ob ein Knoten Hinzugefügt, um die linke oder die Rechte des übergeordneten, zum Beispiel:
Ich bin vorbei ein lamba, aber eine gleichwertige Methode für die übergabe eines comparer tun sollte.
InformationsquelleAutor Andre Artus
Hier ist eine mathematische Ansatz zu erreichen, was auf eine sehr simple Weise :
Verwendete Sprache : Java
`
/*
Algorithmus für die Konstruktion von binären Baum aus gegebenen Inorder und Preorder traversalen.
Folgenden wird die Terminologie verwendet :
ich : ist der inorder-array geliefert
p : steht für die preorder-array geliefert
beg1 : Start-index der inorder-array
beg2 : Start-index der preorder-array
end1 : Ende-index der inorder-array
end2 : Ende-index der preorder-array
*/
public static void constructTree(Node root, int[] i, int[] p, int beg1, int end1, int beg2, int end2)
{
}
`
Müssen Sie zum aufrufen der Funktion durch den folgenden code :
In Fall müssen Sie eine ausführliche Erläuterung des Codes bitte in die Kommentare. Ich würde mich über Hilfe freuen :).
InformationsquelleAutor Ashish Jain
Unten ist eine funktionierende Implementierung in C#
Hier ist eine mögliche Implementierung von
BinarySearchTree<T>
undBinaryTreeNode<T>
. Einige tests:Sie sind test-Methoden, die Sie nicht wirklich benötigen. Und Sie sind einfach zu implementieren, trotzdem.
InformationsquelleAutor Ohad Schneider