JSFiddle - React, Tailwind, and code Playground

HTML

<code id="console"></code>

CSS

code {
  display: block;
  white-space: pre-wrap   
}

JavaScript

const data = [
  'E',
  'HB',
  'AFC',
  'G',
  'D'
]

// Classe servant à modéliser un "Node".
// Contient un niveau (la position de ligne dans la liste ci-dessus),
// une valeur (la lettre),
// et des enfants (les autres nodes de valeur inférieure)
// Je l'ai appelé "Node", mais on peut l'appeler n'importe comment.
// "Node" n'a pas de signification particulière en JS
// Si la classe "Node" existe déjà en VB.net, alors il faut lui donner un autre nom
// Conceptuellement, c'est +- la même chose que des dossiers qui contiennent des sous-dossiers etc.
class Node {

	// Constructeur d'instance. Appelé quand tu fais new Node()
  // level > numéro de la ligne du tablea 'data' ci-dessus (on compte à partir de 0)
  // value > la lettre correspondante
  // par exemple : new Node(2, "F")
  constructor(level, value) {
  
  	// Les différents attributs d'un node
    this.level = level	// integer
    this.value = value	// string
    this.children = []	// C#: List<Node>
  }

	// Cherche et sauve tous les éléments inférieurs à l'instance de Node actuelle (this)
  setChildren() {
  	// On s'assure que la liste est vide
    this.children = []
    // Pour chaque element (child) de la liste de nodes
    for (let child of nodes) {
    	// Si le niveau de child < niveau de this (l'instance courante),
      // alors c'est un enfant
      if (child.level > this.level) {
        this.children.push(child)
      }
    }
  }

	// Convertit les children récursifs en une liste plate
  flatten(str, list) {
  	// On ajoute la valeur courante à la chaine
    str += this.value
    // Si la chaine fait 4 lettres, on l'ajoute à la liste
    if (str.length === 4) {
    	list.push(str)
    }   
		
    // On rappelle flatten pour les enfants,
    // ce qui fait grandir la variable `str` pour chaque branche de l'arbre
    for (let child of this.children) {    	
      child.flatten(str, list)
    }
  }

}

// Liste des instances de Nodes
// [] est un tableau redimensionnable
// en C#, ce sera "var...