In diesem Artikel werde ich mein Bestes geben, einige der wichtigsten Algorithmen zu erklären, die Sie vor einem Coding-Interview lernen sollten. Was ist ein binärer Suchbaum (BST)?Ein BST, das häufig bei Kodierungsinterviews anzutreffen ist, ist eine baumartige Datenstruktur mit einer Wurzel an der Spitze. Sie eignen sich hervorragend zum Speichern numerischer Werte, da ihre geordnete Natur ein schnelles Suchen und Nachschlagen ermöglicht. Im Vergleich zu gewöhnlichen Bäumen weist BST die folgenden Eigenschaften auf:
Das folgende Diagramm soll die Dinge klarer machen. Definition eines binären Baumknotens Normalerweise definieren wir einen binären Baumknoten in Javascript mit der folgenden Funktion: Funktion TreeNode(Wert, links, rechts) { dies.val = val dies.links = links dies.rechts = rechts } Grundlegende Durchquerung eines binären Baums (In-Order, Post-Order, Pre-Order)Zuerst müssen wir wissen, wie jeder Knoten des BST durchlaufen wird. Dadurch können wir eine Funktion auf allen Knoten des BST ausführen. Wenn wir beispielsweise einen Wert x in einem BST finden möchten, benötigen wir Knoten. Hierfür gibt es im Wesentlichen drei Möglichkeiten. Glücklicherweise haben sie ein gemeinsames Thema. In-Order-TraversierungEin rekursiver Algorithmus ist der einfachste Weg, mit der In-Order-Traversierung eines Binärbaums zu beginnen. Die Idee ist folgende:
Der Inorder-Algorithmus durchläuft die Baumknoten von links, von der Mitte und von rechts. const inorder = (Wurzel) => { const Knoten = [] wenn (Wurzel) { inorder(Wurzel.links) Knoten.push(root.val) inorder(root.rechts) } Rückgabeknoten } // Für unseren Beispielbaum ergibt dies [1,2,3,4,5,6] Post-Order-TraversierungEin rekursiver Algorithmus ist die einfachste Möglichkeit, eine Post-Order-Traversierung zu starten.
Bei der Post-Order-Traversierung werden die Baumknoten von links, rechts und der Mitte besucht. const postorder = (Wurzel) => { const Knoten = [] wenn (Wurzel) { Postorder(Wurzel.links) Postorder(root.rechts) Knoten.push(root.val) } Rückgabeknoten } // Für unseren Beispielbaum ergibt dies [1,3,2,6,5,4] Durchquerung vorbestellenDer einfachste Weg, eine Pre-Order-Traversierung zu starten, ist mit einem rekursiven Algorithmus.
Bei der Post-Order-Traversierung werden die Baumknoten von der Mitte, von links und von rechts aus besucht. const preorder = (Wurzel) => { const Knoten = [] wenn (Wurzel) { Knoten.push(root.val) Vorbestellung (root.left) Vorbestellung (Root.right) } Rückgabeknoten } // Für unseren Beispielbaum ergibt dies [4,2,1,3,5,6] Was ist ein gültiger binärer Suchbaum? Ein gültiger binärer Suchbaum (BST) hat alle linken Kinder, deren Werte kleiner als der Elternknoten sind, und alle rechten Kinder, deren Werte größer als der Elternknoten sind.
const isValidBST = (root) => { const-Helfer = (Knoten, min, max) => { wenn (!node) true zurückgibt wenn (node.val <= min || node.val >= max) false zurückgibt gibt Helfer zurück (Knoten.links, min, Knoten.val) und Helfer (Knoten.rechts, Knoten.val, max) } Rückgabe-Helfer (Root, Zahl.MIN_SAFE_INTEGER, Zahl.MAX_SAFE_INTEGER) } So finden Sie die maximale Tiefe eines BinärbaumsHier versucht der Algorithmus, die Höhe/Tiefe unseres BST zu finden. Mit anderen Worten, wir untersuchen, wie viele „Ebenen“ der BST enthält.
const maxDepth = Funktion(Wurzel) { const calc = (Knoten) => { wenn (!node) return 0 returniere Math.max(1 + calc(Knoten.links), 1 + calc(Knoten.rechts)) } gibt calc(Wurzel) zurück }; So finden Sie den kleinsten gemeinsamen Vorfahren zwischen zwei BaumknotenErhöhen wir den Schwierigkeitsgrad. Wie finden wir den gemeinsamen Vorfahren zwischen zwei Baumknoten in unserem Binärbaum? Schauen wir uns einige Beispiele an. In diesem Baum ist der kleinste gemeinsame Vorfahr von 3 und 1 2. Der LCA von 3 und 2 ist 2. Der LCA von 6 und 1 und 6 ist 4. Sehen Sie hier das Muster? Der LCA zwischen zwei Baumknoten ist entweder einer der Knoten selbst (Fälle 3 und 2) oder ein übergeordneter Knoten, bei dem sich das erste untergeordnete Element irgendwo in seinem linken Teilbaum und das zweite untergeordnete Element irgendwo in seinem rechten Teilbaum befindet. Der Algorithmus zum Finden des kleinsten gemeinsamen Vorfahrens (LCA) zwischen zwei Baumknoten p und q lautet wie folgt:
const niedrigsterGemeinsamerVorfahre = Funktion(Wurzel, p, q) { lass lca = null const isCommonPath = (Knoten) => { wenn (!node) false zurückgibt var isLeft = isCommonPath(node.left) var isRight = isCommonPath(node.right) var isMid = Knoten == p || Knoten == q wenn (istMitte && istLinks || istMitte && istRechts || istLinks && istRechts) { lca = Knoten } Rückgabe ist links || ist rechts || ist Mitte } isCommonPath(Wurzel) Ökobilanz zurückgeben }; 😊 EndeBisher haben wir gelernt, wie man einen BST durchläuft, überprüft und seine Tiefe berechnet. Damit ist dieser Artikel zum Tutorial zum binären Suchbaumalgorithmus für JavaScript-Anfänger abgeschlossen. Weitere relevante Inhalte zum binären Suchbaumalgorithmus in JavaScript finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: mysql8.0.20 herunterladen und installieren und aufgetretene Probleme (Abbildung und Text)
Beim Erstellen eines Zeitfelds STANDARD CURRENT_T...
Inhaltsverzeichnis 1. Funktionsdefinition 1.1 Fun...
Der Effekt, den wir erreichen müssen: Was wird be...
Ab MySQL 5.7 wurden viele Sicherheitsupdates hinz...
Die Javascript-Funktion zum Konvertieren von <t...
Vorwort Bei unserer täglichen Arbeit führen wir m...
Dieser Artikel erläutert anhand von Beispielen di...
Dieser Artikel zeichnet das Installationstutorial...
In der MySQL-Dokumentation können MySQL-Variablen...
System: VMTOOLs-Download: Verknüpfung: https://pa...
Hintergrund Da ich alle meine Aufgaben auf Docker...
Eine interessante Entdeckung: Es gibt eine Tabell...
Inhaltsverzeichnis Vorwort Einführung in QueryCac...
Beim Schreiben von HTML-Code sollte die erste Zei...
Karussellanzeige der Vue-Karte beim Umschalten de...