Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
¿Por qué la variable raíz finalmente conserva el resultado de todo el árbol que se crea dentro del bucle while?

La variable curr tiene una referencia a la raíz en la primera iteración del ciclo while, pero a partir de la segunda iteración, la variable curr debería tener una referencia a un nodo recién creado en cada iteración.

 var TreeNode = function (value, left, right) { this.value = value; this.left = left; this.right = right; }; function arrayToTree(array) { if (!array.length) return undefined; var root = new TreeNode(array.shift()); var queue = [root]; while (array.length) { var curr = queue.shift(); var left = new TreeNode(array.shift()); curr.left = left; queue.push(left); if (!array.length) break; var right = new TreeNode(array.shift()); queue.push(right); curr.right = right; } return root; }; const ret = arrayToTree([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) console.log(ret);

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

La variable root solo hace referencia al objeto raíz. Eso no cambia durante el proceso de extensión. Pero durante ese proceso, las propiedades left y right de ese objeto cambian de valor (de null a un nuevo nodo).

En la primera iteración del bucle, curr hace referencia al mismo objeto que root , por lo que cualquier mutación que se lleve a curr se lleva a root : ambas variables dan acceso al mismo objeto único. Como el código establece curr.left en un nuevo nodo y establece curr.right en un nuevo nodo, en ese momento root.left y root.right se han establecido en nuevos nodos.

En la próxima iteración, curr hará referencia a uno de esos nodos recién creados (que ya están "conectados" a root ), y lo mismo sucede allí: como curr muta, en realidad mutamos un nodo al que se puede acceder desde root . Ese nodo más profundo se amplía con nuevos nodos referenciados por sus propiedades left y/o right .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que Trincot respondió a tu pregunta. Si eso no está claro, por favor comente.

Pero si desea una versión de esto que no implique mutación, puede hacerlo recursivamente, observando que el hijo izquierdo del nodo formado a partir del valor en el índice i es el formado a partir del valor en el índice 2 * i + 1 y el hijo derecho del valor en el índice 2 * i + 2 , suponiendo que existan:

 const toTree = (xs, i = 0) => i >= xs .length ? undefined : {value: xs [i], left: toTree (xs, 2 * i + 1), right: toTree (xs, 2 * i + 2)} console .log (toTree ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Esto no usa su constructor TreeNode. A menos que haya más de lo que se muestra, no veo razón para ello. Pero si necesitamos usarlo, podríamos reemplazar esto:

 : {value: xs [i], left: toTree (xs, 2 * i + 1), right: toTree (xs, 2 * i + 2)}

con este:

 : new TreeNode (xs [i], toTree (xs, 2 * i + 1), toTree (xs, 2 * i + 2))
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda