Na vida real, acredito que todos estão familiarizados com as árvores. Quer sejam salgueiros, choupos ou pessegueiros, pode-se dizer que as árvores podem ser vistas em todas as nossas vidas no mundo da informática. de um modelo hierárquico ,
conforme mostrado abaixo:
Existem muitas aplicações da estrutura em árvore. Por exemplo, a estrutura organizacional de uma empresa pode ser representada por uma árvore, conforme mostrado abaixo:
Além das estruturas organizacionais, itens como árvores genealógicas, províncias e cidades, etc. podem ser representados por meio de estruturas em árvore.
Existem muitos termos para árvores, conforme mostrado abaixo:
n=0
, é chamado de grau de nó deADH
é uma das estruturas de dados mais comuns no front-end, como árvore DOM, seleção em cascata, componentes de árvore, etc.
JavaScript não fornece a estrutura de dados em árvore, mas podemos usar; objetos e Array para simular uma árvore,
como o seguinte código:
const tree = { valor: 'A', crianças: [ { valor: 'B', crianças: [ {valor: 'E', filhos: nulo}, {valor: 'F', filhos: nulo}, ], }, { valor: 'C', filhos: [{ valor: 'G', filhos: nulo }], }, { valor: 'D', crianças: [ {valor: 'H', filhos: nulo}, {valor: 'I', filhos: null }, ], }, ], }
O chamado algoritmo de travessia em profundidade consiste em pesquisar os ramos da árvore o mais profundamente possível. Sua ordem de travessia é a seguinte:
A ideia de implementação é a seguinte:
children
do nó raiz,o código de implementação é o seguinte:
function dfs(root) {; console.log(raiz.valor) root.children && root.children.forEach(dfs) // Consistente com o seguinte // if (root.children) { // root.children.forEach(child => { //dfs(filho) // }) // } } dfs(tree) //Esta árvore é a árvore definida anteriormente/* Resultado A B E F C G D H EU */
Como você pode ver, a ordem é consistente com a imagem, o que significa que não há problema com nosso algoritmo.
A chamada prioridade de amplitude é visitar os nós mais próximos do nó raiz em ordem. Sua ordem de passagem é a seguinte:
A ideia de implementação é a seguinte:
children
do cabeçalho da fila sejam adicionados à fila;O código de implementação é o seguinte:
function bfs(root) { // 1. Crie uma nova fila e adicione nós à fila const q = [root] // 4 Repita enquanto (q.length > 0) { const node = q.shift() // 2 cabeças da fila são retiradas da fila console.log(node.value) // 3 filhos, o chefe da equipe, são adicionados à equipe node.children && node.children.forEach(filho => { q.push(filho) }) } } bfs (árvore) /* Resultado A B C D E F G H EU */
Como você pode ver, a ordem é consistente com a imagem, o que significa que não há problema com nosso algoritmo.