Ancestro común más bajo en un árbol binario
El ancestro común más bajo de dos nodos \(p\) y \(q\) de un árbol 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\)). Esta vez el árbol es un árbol binario cualquiera, no necesariamente de búsqueda. Responde varias consultas.
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
11
3 5 1 6 2 0 8 null null 7 4
3
5 1
5 4
7 8
Salida
3
5
3
Ejemplo 2
Entrada
2
1 2
1
1 2
Salida
1
Basado en el problema 236 de LeetCode, Lowest Common Ancestor of a Binary Tree, adaptado a entrada y salida estándar; enunciado redactado para este juez. Es parte de la lista Grind 75 de Yangshun Tay.
Comentarios