Dans la vraie vie, je crois que tout le monde connaît les arbres. Qu'il s'agisse de saules, de peupliers ou de pêchers, on peut dire que les arbres peuvent être vus partout dans notre vie, les arbres sont une abstraction ; d'un modèle de structure hiérarchique ,
comme indiqué ci-dessous :
Il existe de nombreuses applications de la structure arborescente. Par exemple, la structure organisationnelle d'une entreprise peut être représentée par un arbre, comme indiqué ci-dessous :
En plus des structures organisationnelles, des éléments tels que les arbres généalogiques, les provinces et les villes, etc. peuvent être représentés à l'aide de structures arborescentes.
Il existe de nombreux termes pour les arbres, comme indiqué ci-dessous :
n=0
, on parle d'arbre vide ;ADH
peut être considérée comme l'une des structures de données les plus courantes dans le front-end, comme l'arborescence DOM, la sélection en cascade, les composants d'arborescence, etc.
JavaScript ne fournit pas la structure de données arborescente, mais nous pouvons l'utiliser. objets et Array pour simuler un arbre,
comme le code suivant :
const tree = { valeur : 'A', enfants: [ { valeur : 'B', enfants: [ { valeur : 'E', enfants : null }, { valeur : 'F', enfants : null }, ], }, { valeur : 'C', enfants : [{ valeur : 'G', enfants : null }], }, { valeur : 'D', enfants: [ { valeur : 'H', enfants : null }, { valeur : 'Je', enfants : null }, ], }, ], }
L'algorithme de parcours dit en profondeur consiste à rechercher les branches de l'arbre aussi profondément que possible. Son ordre de parcours est le suivant :
L'idée d'implémentation est la suivante :
children
du nœud racine ;le code d'implémentation est le suivant :
function dfs(root) { console.log(racine.valeur) root.children && root.children.forEach(dfs) // Conformément à ce qui suit // if (root.children) { // root.children.forEach(enfant => { //dfs(enfant) // }) // } } dfs(tree) //Cet arbre est l'arbre défini précédemment/* Résultat A B E F C G D H je */
Comme vous pouvez le constater, la commande est conforme à la photo, ce qui signifie qu'il n'y a aucun problème avec notre algorithme.
La soi-disant priorité de largeur consiste à visiter les nœuds les plus proches du nœud racine dans l'ordre. Son ordre de parcours est le suivant :
L'idée de mise en œuvre est la suivante :
children
de la tête de file d'attente à la file d'attente dans l'ordre,Le code d'implémentation est le suivant :
function bfs(root) { // 1. Créez une nouvelle file d'attente et ajoutez des nœuds à la file d'attente const q = [root] // 4 Répétez while (q.length > 0) { const node = q.shift() // 2 têtes de file d'attente sont retirées de la file d'attente console.log(node.value) // 3 enfants, le chef de l'équipe, sont ajoutés à l'équipe node.children && node.children.forEach(enfant => { q.push (enfant) }) } } bfs(arbre) /* Résultat A B C D E F G H je */
Comme vous pouvez le constater, la commande est conforme à la photo, ce qui signifie qu'il n'y a aucun problème avec notre algorithme.