Eine häufig gestellte Interviewfrage besteht darin, einen Algorithmus anzugeben, mit dem festgestellt werden kann, ob ein gegebener Binärbaum eine ausgeglichene Höhe aufweist (AVL-Baumdefinition).
Ich habe mich gefragt, ob wir etwas Ähnliches mit rot-schwarzen Bäumen machen können.
Wenn ein beliebiger, ungefärbter Binärbaum (mit NULL-Knoten) gegeben ist, gibt es einen "schnellen" Algorithmus, der bestimmen kann, ob wir die Knoten rot / schwarz färben (und eine Färbung finden) können, so dass sie alle Eigenschaften eines Rot-Schwarz-Baums erfüllen (Definition wie in dieser Frage )?
Ein erster Gedanke war, dass wir einfach die NULL-Knoten entfernen und versuchen können, rekursiv zu überprüfen, ob der resultierende Baum ein rot-schwarzer Baum sein kann, aber das schien nirgendwo hin zu gehen.
Ich habe (kurz) im Internet nach Artikeln gesucht, konnte aber anscheinend keine finden, die sich mit diesem Problem befassen.
Es ist möglich, dass mir etwas Einfaches fehlt.
quelle
Antworten:
Wenn für jeden Knoten eines Baumes der längste Weg von ihm zu einem Blattknoten nicht mehr als zweimal länger ist als der kürzeste, hat der Baum eine rot-schwarze Färbung.
Hier ist ein Algorithmus, um die Farbe eines Knotens zu bestimmen
n
Hier
n.black-quota
ist die Anzahl der schwarzen Knoten , die Sie erwarten , gehen zu einem Blatt zu sehen, die von dem Knotenn
undn.min-height
der Abstand zum nächsten Blatt.Der Kürze halber sei , h ( n ) = und m ( n ) = .b ( n ) = h ( n ) = m ( n ) =
n.black-quota
n.height
n.min-height
quelle
Ein Ansatz ist die Verwendung der dynamischen Programmierung.
quelle