• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

133
Vistas
¿Cómo encuentras los n elementos más pequeños en un árbol de búsqueda binaria?

Intenté esto pero está imprimiendo todo el árbol:

 function inOrder(root, i, n) { if (!root) return; inOrder(root.left, i, n); if(i++ < n) console.log(root.key); inOrder(root.right, i, n); }
almost 3 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Esto sucede porque i++ solo cambia la variable local . No cambia la variable i de la persona que llama, por lo que los incrementos realizados dentro del recorrido del subárbol izquierdo no tendrán ninguna influencia en el valor de i que se pasa a la segunda llamada recursiva.

Puede resolver esto de muchas maneras, pero una es permitir que cada llamada recursiva devuelva el valor de su i a la persona que llama, de modo que la persona que llama pueda tomarlo para actualizar su propia i y continuar con ese valor.

Algunas otras observaciones:

  • Una vez que i alcanzado el valor de n , no sirve de nada seguir haciendo una llamada recursiva, así que salga de la función inmediatamente cuando eso suceda.

  • En lugar de dejar que i incremente, deje que n disminuya . De esa manera, solo necesita un argumento adicional en lugar de dos .

 function inOrder(root, n) { // No more `i` if (!root) return n; n = inOrder(root.left, n); if (n-- <= 0) return n; // decrement instead of increment now & exit console.log(root.key); return inOrder(root.right, n); } class Node { // Definition of class to make the demo work constructor(key) { this.key = key; this.left = this.right = null; } static from(...keys) { if (!keys.length) return; const root = new Node(keys.shift()); for (const key of keys) root.add(key); return root; } add(key) { if (key < this.key) { if (this.left) this.left.add(key); else this.left = new Node(key); } else { if (this.right) this.right.add(key); else this.right = new Node(key); } } } // demo const root = Node.from(5, 13, 4, 7, 11, 1, 8, 12, 9, 3, 2, 6, 10); inOrder(root, 6);

almost 3 years ago · Santiago Gelvez 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda