JavaScript - Árbol binario inmutable

  • 0 Respuestas
  • 117 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado Adalher

  • *
  • Underc0der
  • Mensajes: 116
  • Actividad:
    16.67%
  • Reputación 0
    • Ver Perfil

JavaScript - Árbol binario inmutable

  • en: Noviembre 16, 2020, 11:08:13 pm
Hola a todos,

pensé en publicar algo que no se ve todos los días en JavaScript. Un árbol binario inmutable y ordenado al que se le puede agregar, eliminar, y mostrar datos.

Código: Javascript
  1. class Vacio {
  2.   constructor() {
  3.     Object.freeze(this);
  4.   }
  5.   agregar(datos) {
  6.     return new Nodo(datos, this, this);
  7.   }
  8.   mostrar() {
  9.     console.log("vacio");
  10.   }
  11.   encontrar(_) {
  12.     return this;
  13.   }
  14.   eliminar(_) {
  15.     return this;
  16.   }
  17.   unir_ramas(izquierda, _) {
  18.     return izquierda;
  19.   }
  20. }
  21.  
  22. class Nodo {
  23.   constructor(datos, izquierda, derecha) {
  24.     this.datos = datos;
  25.     this.izquierda = izquierda;
  26.     this.derecha =derechas;
  27.     Object.freeze(this);
  28.   }
  29.   agregar(datos) {
  30.     if (this.datos < datos) {
  31.       return new Nodo(this.datos, this.izquierda.agregar(datos), this.derecha);
  32.     } else if (this.datos > datos) {
  33.       return new Nodo(this.datos, this.izquierda, this.derecha.agregar(datos));
  34.     } else {
  35.       return this;
  36.     }
  37.   }
  38.   mostrar() {
  39.     this.izquierda.mostrar();
  40.     console.log(this.datos);
  41.     this.derecha.mostrar();
  42.   }
  43.   encontrar(datos) {
  44.     if (this.datos < datos) {
  45.       return this.izquierda.encontrar(datos);
  46.     } else if (this.datos > datos) {
  47.       return this.derecha.encontrar(datos);
  48.     } else {
  49.       return this;
  50.     }
  51.   }
  52.   eliminar(datos) {
  53.     if (this.datos < datos) {
  54.       return new Nodo(this.datos, this.izquierda.eliminar(datos), this.derecha);
  55.     } else if (this.datos > datos) {
  56.       return new Nodo(this.datos, this.izquierda, this.derecha.eliminar(datos));
  57.     } else {
  58.       if (this.izquierda === null) {
  59.         return this.derecha;
  60.       } else if (this.derecha === null) {
  61.         return this.izquierda;
  62.       } else {
  63.         return this.derecha.unir_ramas(this.izquierda);
  64.       }
  65.     }
  66.   }
  67.   unir_ramas(izquierda) {
  68.     return new Nodo(this.datos, this.izquierda.unir_ramas(izquierda), this.derecha);
  69.   }
  70. }
  71.  
  72. const arr = [10, 1, 9, 2, 8, 3, 7, 4, 6, 5].reduce((a, e) => { return a.agregar(e) }, new Vacio());
  73.  
  74. arr.mostrar();
  75.  
  76. console.log("\n\n");
  77.  
  78. (arr.encontrar(<img src="https://underc0de.org/foro/Smileys/default/cool.gif" alt="8&#41;" title="Cool" class="smiley" />).mostrar();
  79.  
  80. console.log("\n\n");
  81.  
  82. const ans = [2, 4, 6, 8, 10, 1, 3, 5, 10, 10].reduce((a, e) => { return a.eliminar(e) }, arr);
  83.  
  84. ans.mostrar();
  85.  

Es solo algo con lo que estaba jugando mientras me familiarizaba con JavaScript. Lo sé, no es muy práctico en JavaScript pero necesito practicar en algo.


Saludos
« Última modificación: Noviembre 18, 2020, 05:23:51 am por Adalher »

 

[VIDEOTUTORIAL] Aprender Javascript desde cero - incluye hacking con Node.js

Iniciado por graphixx

Respuestas: 2
Vistas: 5668
Último mensaje Agosto 25, 2017, 10:08:45 am
por Gothiquedark
Cheat-Sheet: JAVASCRIPT - Hoja Guía para que no se me olvide

Iniciado por Denisse

Respuestas: 0
Vistas: 348
Último mensaje Marzo 20, 2020, 03:00:11 am
por Denisse
[VIDEOTUTORIAL] Zenva – Cómo Programar para Emprendedores – JavaScript

Iniciado por graphixx

Respuestas: 0
Vistas: 2529
Último mensaje Enero 10, 2016, 02:26:42 pm
por graphixx
[Curso gratis con certificado] HTML5 - CSS3 - JAVASCRIPT [OPENWEBINARS]

Iniciado por graphixx

Respuestas: 0
Vistas: 8204
Último mensaje Septiembre 12, 2016, 09:18:15 am
por graphixx
[VIDEOTUTORIAL] TypeScript (2014) Programación orientada a objetos en JavaScript

Iniciado por graphixx

Respuestas: 0
Vistas: 2150
Último mensaje Octubre 09, 2015, 08:54:14 am
por graphixx