NAJWIĘKSZY binarne drzewo poszukiwań w binarnym drzewa:
Istnieją dwa sposoby możemy podchodzić do tego problemu,
i) Największy BST nie indukowana (z węzła, wszystkie jego dzieci nie muszą spełniać warunek BST)
ii) Największy BST indukowana (z węzła, wszystkie jego dzieci będą spełniać warunek BST)
Będziemy dyskutować o największych BST (Nie) wywołanego tutaj. Będziemy śledzić podejście oddolne (post kolejność przejścia), aby rozwiązać ten.
a) osiąga węzeł liści
b) Węzeł drzewa (z liści) zwróci obiekt TreeNodeHelper który ma następujące pola w nim.
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) Początkowo od węzła liści węzły = 1, isBST = prawda MINVALUE = maxvalue = node.data. I dalej, węzły Liczba zostanie zwiększona, jeżeli spełnia warunek BST.
d) Przy pomocy tego, będziemy sprawdzać stan BST z bieżącego węzła. I będziemy powtarzać to samo do korzenia.
e) Z każdym węźle zostaną zwrócone dwa obiekty. jeden dla ostatniego maksimum BST a drugi dla aktualnych BST satysfakcjonujących węzłów. Tak więc z każdego węzła (powyżej liści) (2 + 2) = 4 (2 na lewym poddrzewie i 2 dla prawego poddrzewa) obiekty zostaną porównane i dwa będą zwracane.
f) Końcowa maksymalna węzłowi od nasady będzie największą BST
PROBLEM:
Istnieje problem w tym podejściu. A po to podejście, jeśli poddrzewo nie spełniające warunek BST z bieżącego węzła, nie możemy po prostu zignorować poddrzewo (nawet jeśli ma mniejszą liczbę węzłów). Na przykład
55
\
75
/ \
27 89
/ \
26 95
/ \
23 105
/ \
20 110
Z węzłów liściowych (20110) przedmioty będą badane z węzłem (105), to spełnia warunek. Ale gdy osiągnie węzeł (95), węzeł liści (20) nie spełnia warunku BST. Ponieważ jest to rozwiązanie dla BST (nie indukowanego) nie powinniśmy ignorować węzeł (105) i węzeł (110) spełnia warunek. Więc z węzła (95) musimy wracać ponownie testuje kondycję BST i złapać tych węzłów (105, 110).
Kompletny kod dla tej implementacji jest dostępna w ten link
https://github.com/dineshappavoo/Implementation/tree/master/LARGEST_BST_IN_BT_NOT_INDUCED_VER1.0