STØRSTE binært søketre i et binært TREE:
Det er to måter vi kan nærme seg dette problemet,
i) største BST ikke indusert (Fra en node, trenger alle sine barn ikke tilfredsstiller BST tilstand)
ii) Største BST indusert (fra en node, vil alle de underordnede tilfredsstiller den betingelse BST)
Vi vil diskutere om den største BST (Ikke Induced) her. Vi vil følge bottom up tilnærming (Post for traversering) for å løse dette.
a) Nå bladnoden
b) Et tre node (fra bladet) vil returnere et TreeNodeHelper objekt som har følgende felter i det.
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) Til å begynne med fra bladnoden, noder = 1, isBST = true, MINVALUE = MAXVALUE = node.data. Og videre, nodene telle skal økes dersom den tilfredsstiller BST tilstand.
d) Ved hjelp av dette, vil vi sjekke BST tilstand med gjeldende node. Og vi vil gjenta det samme til roten.
e) Fra hver node to gjenstander vil bli returnert. en for siste maksimal BST og en for strøm BST tilfredsstillende noder. Så fra hver node (ovenfor blad) (2 + 2) = 4 (2 til venstre subtre og 2 til høyre undertreet) objekter vil bli sammenlignet, og to vil bli returnert.
f) Den endelige maksimale node objekt fra roten vil være det største BST
PROBLEM:
Det er et problem i denne tilnærmingen. Mens du følger denne tilnærmingen, hvis en deltre ikke er tilfredsstillende BST tilstand med gjeldende node, vi kan ikke bare ignorere treet (selv om den har mindre antall noder). For eksempel
55
\
75
/ \
27 89
/ \
26 95
/ \
23 105
/ \
20 110
Fra bladnodene (20,110) blir objektene testet med node (105), tilfredsstiller den betingelse. Men når det kommer til node (95) bladnoden (20) tilfredsstiller ikke BST tilstand. Ettersom denne løsningen er for BST (ikke-indusert) skal vi ikke se bort fra node (105) og node (110), som tilfredsstiller betingelsen. Så fra node (95) vi har tilbake igjen testing BST tilstand og fange de noder (105, 110).
Den komplette koden for denne implementeringen er tilgjengelig på denne linken
https://github.com/dineshappavoo/Implementation/tree/master/LARGEST_BST_IN_BT_NOT_INDUCED_VER1.0