MAYOR árbol de búsqueda binario en un árbol binario:
Hay dos formas en que podemos abordar este problema,
i) no indujo más grande BST (De un nodo, todos sus hijos no tendrán que cumplir la condición BST)
ii) BST más grande indujeron (De un nodo, todos sus hijos satisfarán la condición BST)
Vamos a discutir sobre el BST más grande (no inducida) aquí. Vamos a seguir un enfoque ascendente (Agrega recorrido orden) para resolver esto.
a) alcanzar el nodo hoja
b) un nodo de árbol (de la hoja) devolverá un objeto TreeNodeHelper que tiene los siguientes campos en el mismo.
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) inicialmente desde el nodo de hoja, los nodos = 1, isBST = true, minValue = maxValue = node.data. Y aún más, los nodos de cómputo de tiempo se incrementan si se satisface la condición de BST.
d) Con la ayuda de esto, vamos a comprobar la condición BST con el nodo actual. Y vamos a repetir el mismo hasta la raíz.
e) A partir de cada nodo se devolverán dos objetos. uno para la última BST máximo y otro para BST actual nodos satisfactorios. Así que, desde cada nodo (por encima de la hoja) (2 + 2) = 4 (2 para subárbol izquierdo y 2 para sub árbol derecha) objetos serán comparados y serán devueltos dos.
f) El máximo objeto final nodo de la raíz será la más grande BST
PROBLEMA:
Hay un problema en este enfoque. Mientras que sigue este enfoque, si un subárbol no se satisface la condición BST con el nodo actual, no podemos simplemente ignorar el subárbol (incluso tiene menos número de nodos). Por ejemplo
55
\
75
/ \
27 89
/ \
26 95
/ \
23 105
/ \
20 110
A partir de los nodos hoja (20110) los objetos serán probados con el nodo (105), satisface la condición. Pero cuando se alcanza el nodo (95) el nodo de hoja (20) no satisface la condición de BST. Dado que esta solución es que BST (no inducido) no debemos ignorar nodo (105) y el nodo (110) que satisface la condición. Así desde el nodo (95) tenemos que retroceder de nuevo el ensayo del estado BST y atrapar a los nodos (105, 110).
El código completo para esta implementación está disponible en este enlace
https://github.com/dineshappavoo/Implementation/tree/master/LARGEST_BST_IN_BT_NOT_INDUCED_VER1.0