GRÖSSTE binärer Suchbaum in einem Binärbaum:
Es gibt zwei Möglichkeiten, wie wir dieses Problem nähern können,
i) Größte BST nicht induziert (von einem Knoten, alle seine Kinder erfüllen müssen nicht die BST-Bedingung)
ii) Größte BST induziert (von einem Knoten, alle seine Kinder die BST Bedingung erfüllen)
Wir werden über die größte BST diskutieren hier (nicht induziert). Wir werden von unten nach oben Ansatz (Beitrag Order Traversal) folgen, diese zu lösen.
a) erreichen die Astknoten
b) Ein Baum-Knoten (aus dem Blatt) ein TreeNodeHelper Objekt zurück, das die folgenden Felder hat.
public static class TreeNodeHelper {
TreeNode node;
int nodes;
Integer maxValue;
Integer minValue;
boolean isBST;
public TreeNodeHelper() {}
public TreeNodeHelper(TreeNode node, int nodes, Integer maxValue, Integer minValue, boolean isBST) {
this.node = node;
this.nodes = nodes;
this.maxValue = maxValue;
this.minValue = minValue;
this.isBST = isBST;
}
}
c) zunächst aus dem Blattknoten, Knoten = 1, isBST = true, minValue = maxValue = node.data. Und weiter: Zählen Sie die Knoten erhöht werden, wenn es die BST Bedingung erfüllt.
d) Mit Hilfe dieser, werden wir die BST Zustand mit aktuellen Knoten überprüfen. Und wir werden das gleiche bis Wurzel wiederholen.
e) Von jedem Knoten zwei Objekte zurückgegeben werden. ein für letztes Maximum BST und eine anderen für Strom BST befriedigendes Knoten. So von jedem Knoten (oberhalb Blatt) (2 + 2) = 4 (2 linken Teilbaum und 2 für die rechten Teilbaum) Objekte werden verglichen und zwei zurückgegeben.
f) Das letzte maximale Knotenobjekt von der Wurzel wird die größte BST sein
PROBLEM:
Es gibt ein Problem bei diesem Ansatz. Während dieses Ansatz folgen, wenn ein Teilbaum ist nicht den BST Zustand mit dem aktuellen Knoten erfüllen, können wir nicht einfach den Teilbaum ignorieren (selbst hat es eine geringere Anzahl von Knoten). Beispielsweise
55
\
75
/ \
27 89
/ \
26 95
/ \
23 105
/ \
20 110
Von dem Blattknoten (20.110) werden die Objekte mit Knoten (105) geprüft werden, erfüllen sie die Bedingung. Aber wenn es Knoten erreicht (95) der Blattknoten (20) nicht erfüllt, den BST Zustand. Da diese Lösung für BST (nicht induziert) ist, sollten wir nicht-Knoten (105) und dem Knoten (110) ignorieren, die die Bedingung erfüllt. Also von dem Knoten (95) müssen wir ansetzen wieder BST Zustand zu testen und diese Knoten fangen (105, 110).
Der vollständige Code für diese Implementierung ist in diesem Link
https://github.com/dineshappavoo/Implementation/tree/master/LARGEST_BST_IN_BT_NOT_INDUCED_VER1.0