LEGNAGYOBB bináris keresés fa egy bináris fa:
Kétféleképpen tudjuk megközelíteni ezt a problémát,
i) A legnagyobb BST nem indukált (ebből egy csomópont, minden gyermek nem kell kielégíteni a BST feltétel)
ii) A legnagyobb BST indukált (ebből egy csomópont, minden gyermek kielégíti a BST feltétel)
Megbeszéljük a legnagyobb BST (nem indukálja) itt. Követjük alulról felfelé irányuló megközelítés (Post érdekében bejárás), hogy megoldja ezt.
a) Reach a levél csomópont
b) Egy csomópontja (a levél) visszatér egy TreeNodeHelper tárgy, amely az alábbi mezőket benne.
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) Kezdetben a levél csomópont, csomópontok = 1, isBST = true, MINVALUE = MAXVALUE = node.data. És tovább, a csomópontok száma növekedni fog, ha eleget tesz a BST állapotban.
d) Segítségével ezt ellenőrizni fogjuk a BST állapot aktuális csomópont. És mi lesz megismételni ugyanazt évig gyökér.
e) minden egyes csomópont két tárgy kerül vissza. az egyik utolsó maximum BST és egy másik aktuális BST kielégítő csomópontokat. Tehát minden egyes csomópont (fent levél) (2 + 2) = 4 (2 a bal részfa és 2 jobb al-fa) tárgyak összehasonlítását és két küldjük vissza.
f) A végső legnagyobb csomópont objektumot gyökér lesz a legnagyobb BST
PROBLÉMA:
Van egy probléma ezzel a megközelítéssel. Bár ezt követően a megközelítés, ha a részfa nem felel meg a BST állapotban az aktuális csomópont, nem tudjuk egyszerűen figyelmen kívül hagyja a részfa (még akkor kevesebb számú csomópont). Például
55
\
75
/ \
27 89
/ \
26 95
/ \
23 105
/ \
20 110
A levél csomópontok (20.110) a tárgyak vizsgálandó csomóponthoz (105), ez megfelel annak a feltételnek. De amikor eléri csomópont (95) a levél csomópont (20) nem felel meg a BST állapotban. Mivel ez a megoldás a BST (nem indukálódik) nem szabad figyelmen kívül hagyni csomópont (105) és a csomópont (110), amely kielégíti azt az állapotot. Tehát csomópont (95) van, hogy visszalép újra teszteli BST állapot és a fogást azokat a csomópontokat (105, 110).
A teljes kód végrehajtását elérhető ezen a linken
https://github.com/dineshappavoo/Implementation/tree/master/LARGEST_BST_IN_BT_NOT_INDUCED_VER1.0