GROOTSTE binary search BOOM IN EEN binaire boom:
Er zijn twee manieren kunnen we dit probleem aan te pakken,
i) Grootste BST niet geïnduceerd (Uit een knooppunt, moeten al zijn kinderen niet voldoen aan de BST voorwaarde)
ii) Grootste BST geïnduceerde (Uit een knooppunt, zal al zijn kinderen voldoen aan de BST voorwaarde)
We zullen discussiëren over de grootste BST (niet geïnduceerd) hier. We zullen bottom-up benadering (Voeg orde traversal) om dit op te lossen volgen.
a) Bereik het eindknooppunt
b) een boomstructuur (uit het blad) een TreeNodeHelper voorwerp waarvan de volgende gebieden heeft terugkeren.
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) het begin van het eindknooppunt knooppunten = 1, isBST = true, MINVALUE = MAXVALUE = node.data. En verder, de knooppunten telling zal worden verhoogd als het voldoet aan de BST conditie.
d) Met behulp van deze, zullen we de BST staat met huidige knooppunt controleren. En we zullen hetzelfde herhalen tot root.
e) Van elk knooppunt twee objecten worden geretourneerd. één voor last maximale BST en een voor actuele BST bevredigend nodes. Dus vanaf elk knooppunt (boven blad) (2 + 2) = 4 (2 voor linker deelboom en 2 voor rechts subboom) objecten worden vergeleken en twee geretourneerd.
f) De uiteindelijke maximale knooppunt object root de grootste BST zijn
PROBLEEM:
Er is een probleem in deze benadering. Tijdens het volgen van deze aanpak, als een subboom niet voldoet aan de BST staat met het huidige knooppunt, kunnen we niet gewoon de substructuur negeren (zelfs het minder aantal knooppunten). Bijvoorbeeld
55
\
75
/ \
27 89
/ \
26 95
/ \
23 105
/ \
20 110
Van de bladknooppunten (20110) objecten worden getest met het knooppunt (105), het aan de voorwaarde. Maar als het knooppunt bereikt (95) het blad knooppunt (20) niet voldoet aan de BST conditie. Aangezien deze oplossing voor BST (niet geïnduceerde) moeten we niet knooppunt (105) en het knooppunt (110) dat voldoet aan de voorwaarde negeren. Dus vanaf het knooppunt (95) hebben we weer terug te krabbelen testen van BST staat en om hen te vangen knooppunten (105, 110).
De volledige code voor deze implementatie is beschikbaar in deze link
https://github.com/dineshappavoo/Implementation/tree/master/LARGEST_BST_IN_BT_NOT_INDUCED_VER1.0