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

172
Visualizações
console.log Nodos en un árbol binario cuyos subárboles tienen una suma par

El siguiente es un desafío de codificación en el que estoy trabajando.

Se le proporciona un árbol binario en el que cada nodo contiene un valor. Diseñe un algoritmo para imprimir todos los nodos cuyo subárbol sume un número par.

Este es el árbol con el que estoy trabajando para probar, junto con mi función:

 class Node { constructor(val) { this.val = val; this.left = null; this.right = null; } } const a = new Node(3); const b = new Node(11); const c = new Node(4); const d = new Node(4); const e = new Node(-2); const f = new Node(2); a.left = b; a.right = c; b.left = d; b.right = e; c.right = f; // 3 // / \ // 11 4 // / \ \ // 4 -2 2 const isEven = (node) => { if (node === null) return 0; let left = isEven(node.left); let right = isEven(node.right); let sum = left + right + node.val; if (sum % 2 === 0) { console.log(node.val); } return; }; console.log(isEven(a));

La función no funciona como yo quiero.

Dado este árbol, creo que la salida correcta debería ser: 3, 4, -2, 4, también conocido como a, d, e y c. (suponiendo nulo = 0) Pero el resultado que obtengo es: 4, -2, 2, indefinido

No estoy seguro de dónde viene el 2 porque ningún nodo es igual a 2. (Eso fue un error de mi parte)

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Puede hacer que la función devuelva la suma del subárbol. Luego, agregue el resultado de llamar a la función para los hijos izquierdo y derecho y el valor del nodo mismo para obtener la suma del subárbol enraizado en este nodo.

 class Node { constructor(val) { this.val = val; this.left = null; this.right = null; } } const a = new Node(3); const b = new Node(11); const c = new Node(4); const d = new Node(4); const e = new Node(-2); const f = new Node(2); a.left = b; a.right = c; b.left = d; b.right = e; c.right = f; const checkEven = node => { if(!node) return 0; const sum = node.val + checkEven(node.left) + checkEven(node.right); if(sum % 2 === 0) console.log(node.val); return sum; } checkEven(a);

about 4 years ago · Juan Pablo Isaza Relatório

0

el resultado que obtengo es: 4, -2, 2, indefinido.

La razón por la que no está undefined al final es que hace un console.log de la llamada principal isEven , pero su función isEven no devuelve nada: su última instrucción es return , por lo que el console.log principal genera undefined . En realidad, no debe realizar un console.log en su programa principal, ya que la impresión de nodos ya se ha realizado en su función.

No estoy seguro de dónde viene el 2 porque ningún nodo es igual a 2.

El nodo f tiene un valor de 2 y debería estar en la salida.

Creo que la salida correcta debería ser: 3, 4, -2, 4 también conocido como a, d, e y c. (asumiendo nulo = 0)

... y f

No está obteniendo todos los resultados, porque isEven solo puede devolver null o undefined , por lo que left + right no dará lo que espera: agregar null a un número tratará ese null como 0, pero cuando se trata de undefined , la expresión evaluará a NaN .

Esto se soluciona cambiando la return final por la return sum .

Aquí está su script corregido con esas dos correcciones:

 class Node { constructor(val) { this.val = val; this.left = null; this.right = null; } } const a = new Node(3); const b = new Node(11); const c = new Node(4); const d = new Node(4); const e = new Node(-2); const f = new Node(2); a.left = b; a.right = c; b.left = d; b.right = e; c.right = f; // 3 // / \ // 11 4 // / \ \ // 4 -2 2 const isEven = (node) => { if (node === null) return 0; let left = isEven(node.left); let right = isEven(node.right); let sum = left + right + node.val; if (sum % 2 === 0) { console.log(node.val); } return sum; // <-- sum! }; isEven(a); // <-- no console.log

Construcción alternativa de árboles

No está relacionado con su pregunta, pero puede hacer que su constructor de nodos sea un poco más flexible definiendo parámetros para especificar referencias left y right . Luego puede construir el árbol en una expresión anidada.

 class Node { constructor(val, left=null, right=null) { // <-- extra parameters this.val = val; this.left = left; this.right = right; } } const a = new Node(3, new Node(11, new Node(4), new Node(-2) ), new Node(4, null, new Node(2) ) ); const isEven = (node) => { if (node === null) return 0; let left = isEven(node.left); let right = isEven(node.right); let sum = left + right + node.val; if (sum % 2 === 0) { console.log(node.val); } return sum; }; isEven(a);

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