Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

Un árbol binario se almacena en el arreglo root en orden de heap: la raíz está en el índice 0, los hijos del índice i están en 2*i+1 (izquierda) y 2*i+2 (derecha), -1 marca una posición vacía y el arreglo puede terminar con entradas adicionales -1.

La raíz está en la columna 0; un hijo izquierdo está una columna a la izquierda de su padre y un hijo derecho, una columna a la derecha. Devuelve una lista por columna, de izquierda a derecha. Dentro de cada columna, lista los nodos de arriba abajo y, entre los nodos que comparten una columna y una profundidad, en orden creciente de valor.

Función

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
el árbol en orden de heap, con -1 para una posición vacía
Devuelveinteger-2d-array
una lista de valores por columna, empezando por la columna situada más a la izquierda y siguiendo de arriba abajo

Restricciones

  • 1 ≤ root.length ≤ 32767
  • Cada root[i] es -1 o un valor con 0 ≤ root[i] ≤ 5000, y ningún valor aparece dos veces.
  • root[0] nunca es -1, así que el árbol tiene al menos un nodo.
  • El arreglo puede terminar con entradas -1 adicionales después del último nodo.
  • Ambos hijos de un espacio vacío también están vacíos, y el árbol tiene como máximo 14 niveles.

Ejemplos

Entrada
root = [5, 2, 9, 4, 7, 1, 6]
Salida
[[4], [2], [5, 1, 7], [9], [6]]
Explicación
La columna 0 contiene la raíz 5; después, 7 y 1 dos niveles más abajo. Esos dos comparten columna y profundidad, así que 1 aparece antes que 7, aunque 7 está más a la izquierda.
challenge icon

Para ir más allá

Todos los valores son como máximo 5000. ¿Puedes aprovechar eso para prescindir del ordenamiento por comparación y terminar en O(n + 5000) tiempo?

Restablecer código
def verticalTraversal(root):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumento

root = [5, 2, 9, 4, 7, 1, 6]

Salida Esperada

[[4], [2], [5, 1, 7], [9], [6]]