En la vida real, creo que todo el mundo está familiarizado con los árboles, ya sean sauces, álamos o melocotoneros, se puede decir que los árboles se pueden ver en todas partes de nuestras vidas, los árboles son una abstracción ; de una estructura jerárquica ,
como se muestra a continuación:
Existen muchas aplicaciones de la estructura de árbol. Por ejemplo, la estructura organizativa de una empresa se puede representar mediante un árbol, como se muestra a continuación:
Además de las estructuras organizativas, se pueden representar cosas como árboles genealógicos, provincias y ciudades, etc. mediante estructuras de árbol.
Hay muchos términos para árboles, como se muestra a continuación:
n=0
, se denomina árbol vacío;ADH
;es una de las estructuras de datos más comunes en el front-end, como el árbol DOM, la selección en cascada, los componentes del árbol, etc.
JavaScript no proporciona la estructura de datos del árbol, pero podemos usarla; objetos y Array para simular un árbol,
como el siguiente código:
const tree = { valor: 'A', niños: [ { valor: 'B', niños: [ { valor: 'E', hijos: nulo }, { valor: 'F', hijos: nulo }, ], }, { valor: 'C', hijos: [{ valor: 'G', hijos: nulo }], }, { valor: 'D', niños: [ { valor: 'H', hijos: nulo }, { valor: 'yo', hijos: nulo }, ], }, ], }
El llamado algoritmo de recorrido en profundidad primero busca las ramas del árbol lo más profundamente posible. Su orden de recorrido es el siguiente:
La idea de implementación es la siguiente:
children
del nodo raíz;el código de implementación es el siguiente:
function dfs(root) { console.log(valor.raíz) root.children && root.children.forEach(dfs) // Consistente con lo siguiente // if (root.children) { // root.children.forEach(niño => { //dfs(niño) // }) // } } dfs(tree) //Este árbol es el árbol definido previamente/* Resultado A B mi F do GRAMO D h I */
Como puede ver, el orden es consistente con la imagen, lo que significa que no hay ningún problema con nuestro algoritmo.
La llamada prioridad de amplitud es visitar los nodos más cercanos al nodo raíz en orden. Su orden transversal es el siguiente:
La idea de implementación es la siguiente:
children
del encabezado de la cola a la cola en secuencia;El código de implementación es el siguiente:
function bfs(root) { // 1. Crea una nueva cola y agrega nodos a la cola const q = [raíz] // 4 Repetir mientras (q.length > 0) { const node = q.shift() // 2 encabezados de cola se retiran de la cola console.log(node.value) // 3 niños, el jefe del equipo, se agregan al equipo node.children && nodo.niños.forEach(niño => { q.push(niño) }) } } novios (árbol) /* Resultado A B do D mi F GRAMO h I */
Como puede ver, el orden es consistente con la imagen, lo que significa que no hay ningún problema con nuestro algoritmo.