Ancestro común más bajo en un árbol binario de búsqueda

Tiempo límite 2 s
Memoria límite 256 MB
Casos de prueba 10
Dificultad Medio Algoritmos
Mostrar (3) Árboles binariosÁrboles binarios de búsquedaDFS
Enviar solución

Puntos: 10

Tipos de problema
Lenguajes permitidos
C, C++, Java, Python, Rust

En un árbol binario de búsqueda (ABB), para cada nodo, todos los valores de su subárbol izquierdo son menores que el suyo y todos los de su subárbol derecho son mayores.

El ancestro común más bajo de dos nodos \(p\) y \(q\) es el nodo más profundo que tiene a ambos en su subárbol (un nodo está en su propio subárbol, así que puede ser \(p\) o \(q\)). Dado un ABB y varias consultas, responde el ancestro común más bajo de cada par.

Entrada

El árbol viene en el formato de LeetCode, en dos líneas: la primera tiene un entero \(k\) y la segunda \(k\) elementos separados por espacios, que son el recorrido por niveles del árbol. Cada elemento es el valor de un nodo o null si ese hijo no existe; los hijos de un null no se escriben y los null del final se omiten. Un árbol vacío se escribe con \(k = 0\) y una línea vacía.

Después viene una línea con \(k\) \((1 \le k \le 100)\) y \(k\) líneas con dos valores \(p\) y \(q\) que están en el árbol (pueden ser iguales). El árbol tiene entre \(2\) y \(2 \cdot 10^4\) nodos con valores distintos \((|v| \le 10^9)\), y altura a lo más \(1000\).

Salida

Para cada consulta, una línea con el valor del ancestro común más bajo.

Ejemplo 1

Entrada

9
6 2 8 0 4 7 9 null null 3 5
2
2 8
2 4

Salida

2
6
2

Ejemplo 2

Entrada

2
2 1
1
2 1

Salida

2

Basado en el problema 235 de LeetCode, Lowest Common Ancestor of a Binary Search Tree, adaptado a entrada y salida estándar; enunciado redactado para este juez. Es parte de la lista Grind 75 de Yangshun Tay.


Comentarios

No hay comentarios por el momento.