Heim > Java > javaLernprogramm > Hauptteil

Binärer Suchbaum von Grund auf in Java

WBOY
Freigeben: 2024-07-17 22:19:03
Original
830 Leute haben es durchsucht

Binary Search Tree from Scratch in Java

Einführung
Ein binärer Suchbaum (BST) ist eine Art Binärbaum, bei dem jeder Knoten höchstens zwei untergeordnete Knoten hat, die als linkes und rechtes untergeordnetes Kind bezeichnet werden. Für jeden Knoten enthält der linke Teilbaum nur Knoten mit Werten, die kleiner als der Wert des Knotens sind, und der rechte Teilbaum enthält nur Knoten mit Werten, die größer als der Wert des Knotens sind. BSTs werden für effiziente Such-, Einfüge- und Löschvorgänge verwendet.

Warum einen binären Suchbaum verwenden?
BSTs bieten mehrere Vorteile:

Effiziente Suche: Die durchschnittliche Zeitkomplexität beträgt O(log n) für Suche, Einfügen und Löschen.
Dynamischer Satz von Elementen: Unterstützt dynamische Vorgänge im Gegensatz zu statischen Arrays.
Geordnete Elemente: Das Durchlaufen eines BST in der richtigen Reihenfolge liefert Elemente in einer sortierten Reihenfolge.
Schritt-für-Schritt-Anleitung zum Aufbau eines BST
Schritt 1: Definieren Sie die Knotenstruktur
Der erste Schritt besteht darin, die Struktur eines Knotens im Baum zu definieren. Jeder Knoten verfügt über drei Attribute: einen Wert, einen Verweis auf das linke untergeordnete Element und einen Verweis auf das rechte untergeordnete Element.

public class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}
Nach dem Login kopieren

Schritt 2: Erstellen Sie die BST-Klasse mit dem Konstruktor
Als nächstes erstellen wir die BST-Klasse, die einen Verweis auf die Wurzel des Baums und die Methoden zum Einfügen von Elementen enthält.

public class BinarySearchTree {
    TreeNode root;

    public BinarySearchTree() {
        this.root = null;
    }
}
Nach dem Login kopieren

Schritt 3: Implementieren Sie die Einfügemethode
Um ein Element in das BST einzufügen, müssen wir die richtige Position für den neuen Knoten finden. Die Einfügemethode wird normalerweise als rekursive Funktion implementiert.

public void insert(int value) {
    root = insertRec(root, value);
}

private TreeNode insertRec(TreeNode root, int value) {
    // Base case: if the tree is empty, return a new node
    if (root == null) {
        root = new TreeNode(value);
        return root;
    }

    // Otherwise, recur down the tree
    if (value < root.value) {
        root.left = insertRec(root.left, value);
    } else if (value > root.value) {
        root.right = insertRec(root.right, value);
    }

    // Return the (unchanged) node pointer
    return root;
}
Nach dem Login kopieren

Visualisierung
Um besser zu verstehen, wie das Einfügen funktioniert, betrachten wir ein Beispiel. Angenommen, wir möchten die folgende Zahlenfolge in die BST einfügen: 50, 30, 70, 20, 40, 60, 80.

50
Nach dem Login kopieren
  50
 /
30
Nach dem Login kopieren
  50
 /  \
30  70
Nach dem Login kopieren
50
 /  \
30  70
/
Nach dem Login kopieren

40 einfügen:

  50
 /  \
30  70
/ \
Nach dem Login kopieren

60 einfügen

  50
 /  \
30  70
/ \  /

Nach dem Login kopieren

80 einfügen:

  50
 /  \
30  70
/ \  / \
Nach dem Login kopieren

Vollständiger Code
Hier ist der vollständige Code zum Erstellen eines BST und zum Einfügen von Elementen:

public class BinarySearchTree {
    TreeNode root;

    public BinarySearchTree() {
        this.root = null;
    }

    public void insert(int value) {
        root = insertRec(root, value);
    }

    private TreeNode insertRec(TreeNode root, int value) {
        if (root == null) {
            root = new TreeNode(value);
            return root;
        }

        if (value < root.value) {
            root.left = insertRec(root.left, value);
        } else if (value > root.value) {
            root.right = insertRec(root.right, value);
        }

        return root;
    }

    // Additional methods for traversal, search, and delete can be added here

    public static void main(String[] args) {
        BinarySearchTree bst = new BinarySearchTree();
        int[] values = {50, 30, 70, 20, 40, 60, 80};
        for (int value : values) {
            bst.insert(value);
        }

        // Add code to print or traverse the tree
    }
}

class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBinärer Suchbaum von Grund auf in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!