Esto se puede resolver de 2 maneras:
Método 1:
1. Encuentre el valor máximo en el subárbol izquierdo de la raíz. Si es mayor que root, devuelve falso.
- ¿Qué debo hacer si obtendré un título de CS y tengo poco conocimiento de las estadísticas, pero me inscribí en un programa de ciencia de datos de MS?
- ¿Cómo debo responder a las preguntas de la entrevista técnica cuando no sé la respuesta?
- Antes de una entrevista, ¿los entrevistadores de las principales compañías de software están actualizando su conocimiento de algoritmos / estructura de datos?
- ¿Conocer solo C es una desventaja en las entrevistas técnicas?
- Al responder una pregunta en una entrevista de programación, ¿es mejor comenzar siempre con enfoques básicos antes de discutir los más complejos?
2. Encuentre el valor mínimo en el subárbol derecho de la raíz. Si es menor que root, devuelve falso.
3. Verifique recursivamente lo mismo para los subárboles izquierdo y derecho.
Complejidad del tiempo: O (n ^ 2)
Método 2:
En un BST, la raíz es mayor que todos los nodos del subárbol izquierdo. Entonces, el valor raíz forma un límite superior en los valores del subárbol izquierdo.
De manera similar, dado que la raíz es menor que todos los nodos del subárbol derecho, el valor raíz forma un límite inferior en los valores del subárbol derecho.
Esto se puede usar para verificar si un árbol binario es un árbol de búsqueda binario o no.
1. Inicializar, bajo = MIN_VALUE, alto = MAX_VALUE.
2. Si root.data = high, devuelve false.
3. Verifique recursivamente el subárbol izquierdo y el subárbol derecho.
a. Para el subárbol izquierdo, pase alto como root.data porque para un BST, la raíz forma un límite superior para los valores del nodo del subárbol izquierdo.
si. Para el subárbol derecho, pase bajo como root.data porque para un BST, la raíz forma un límite inferior para los valores del nodo del subárbol derecho.
Complejidad del tiempo: O (n)
public boolean isBinarySearchTree () {
return isBinarySearchTree (root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
private boolean isBinarySearchTree (raíz del nodo, int low, int high) {
if (root == null) {
volver verdadero;
}
if (root.data = alto) {
falso retorno;
}
return isBinarySearchTree (root.left, low, root.data) &&
isBinarySearchTree (root.right, root.data, high);
}
Fuente: Compruebe si un árbol binario es un árbol de búsqueda binario