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

174
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 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