Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

219
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda