Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

171
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!