Ich glaube, jeder kennt Bäume , egal ob es sich um Weiden, Pappeln oder Pfirsichbäume handelt, man kann sagen, dass Bäume überall in unserem Leben zu sehen sind eines hierarchischen Modells ,
wie unten gezeigt:
Es gibt viele Anwendungen der Baumstruktur. Beispielsweise kann die Organisationsstruktur eines Unternehmens durch einen Baum dargestellt werden, wie unten gezeigt:
Neben Organisationsstrukturen können auch Stammbäume, Provinzen und Städte usw. mithilfe von Baumstrukturen dargestellt werden.
Es gibt viele Begriffe für Bäume, wie unten gezeigt:
n=0
, wird er als leererADH
eine der häufigsten Datenstrukturen im Front-End ist, wie z. B. DOM-Baum, kaskadierende Auswahl, Baumkomponenten usw.;
JavaScript stellt keine Baumdatenstruktur bereit, wir können sie jedoch verwenden Objekte und Array, um einen Baum zu simulieren,
wie zum Beispiel der folgende Code:
const tree = { Wert: 'A', Kinder: [ { Wert: 'B', Kinder: [ { Wert: 'E', Kinder: null }, { Wert: 'F', Kinder: null }, ], }, { Wert: 'C', Kinder: [{ Wert: 'G', Kinder: null }], }, { Wert: 'D', Kinder: [ { Wert: 'H', Kinder: null }, { Wert: 'I', Kinder: null }, ], }, ], }
Der sogenannte Tiefendurchquerungsalgorithmus besteht darin, die Zweige des Baums so tief wie möglich zu durchsuchen. Seine Durchquerungsreihenfolge ist wie folgt:
Die Implementierungsidee lautet wie folgt:
children
des Wurzelknotens fort.Der Implementierungscode lautet wie folgt:
function dfs(root) { console.log(root.value) root.children && root.children.forEach(dfs) // Konsistent mit Folgendem // if (root.children) { // root.children.forEach(child => { //dfs(child) // }) // } } dfs(tree) //Dieser Baum ist der zuvor definierte Baum/* Ergebnis A B E F C G D H ICH */
Wie Sie sehen, stimmt die Reihenfolge mit dem Bild überein, was bedeutet, dass unser Algorithmus kein Problem darstellt.
Die sogenannte Breitenpriorität besteht darin, die Knoten, die dem Wurzelknoten am nächsten liegen, in der folgenden Reihenfolge zu besuchen:
Die Implementierungsidee ist wie folgt:
children
des Kopfs der Warteschlange nacheinanderDer Implementierungscode lautet wie folgt:
function bfs(root) { // 1. Eine neue Warteschlange erstellen und Knoten zur Warteschlange hinzufügen const q = [root] // 4 Wiederholen while (q.length > 0) { const node = q.shift() // 2 Warteschlangenkopf wird aus der Warteschlange entfernt console.log(node.value) // 3 Kinder, die Leiter des Teams, werden dem Team hinzugefügt node.children && node.children.forEach(child => { q.push(Kind) }) } } bfs(Baum) /* Ergebnis A B C D E F G H ICH */
Wie Sie sehen, stimmt die Reihenfolge mit dem Bild überein, was bedeutet, dass unser Algorithmus kein Problem darstellt.