Rumah Java javaTutorial Penjelasan terperinci tentang struktur pokok binari di Jawa

Penjelasan terperinci tentang struktur pokok binari di Jawa

Jun 16, 2023 am 08:58 AM
struktur data bahasa java Pokok binari

Pokok binari ialah struktur data biasa dalam sains komputer dan struktur data yang biasa digunakan dalam pengaturcaraan Java. Artikel ini akan memperkenalkan struktur pokok binari di Jawa secara terperinci.

1. Apakah pokok binari?

Dalam sains komputer, pokok binari ialah struktur pokok dengan setiap nod mempunyai paling banyak dua nod anak. Antaranya, nod anak kiri lebih kecil daripada nod induk, dan nod anak kanan lebih besar daripada nod induk. Dalam pengaturcaraan Java, pokok binari biasanya digunakan untuk mewakili pengisihan, mencari dan meningkatkan kecekapan pertanyaan data.

2. Pelaksanaan pokok binari di Jawa

Di Jawa, pelaksanaan pokok binari biasanya menggunakan kelas nod (Kelas Nod) dan kelas pokok binari (Kelas Pokok Binari). Kelas nod mewakili setiap nod dalam pepohon binari dan boleh mempunyai bait dan atribut untuk menyimpan data. Kelas pepohon binari mewakili keseluruhan struktur data pepohon perduaan dan mempunyai fungsi seperti memasukkan nod, memadamkan nod dan melintasi. Berikut ialah pelaksanaan pokok binari Java yang mudah:

public class Node {
    int key;
    String value;
    Node leftChild, rightChild;

    public Node(int key, String value) {
        this.key = key;
        this.value = value;
    }
}

public class BinaryTree {
    Node root;

    public void insert(int key, String value) {
        Node newNode = new Node(key, value);
        if (root == null) {
            root = newNode;
        } else {
            Node current = root;
            while (true) {
                if (key < current.key) {
                    if (current.leftChild == null) {
                        current.leftChild = newNode;
                        return;
                    }
                    current = current.leftChild;
                } else {
                    if (current.rightChild == null) {
                        current.rightChild = newNode;
                        return;
                    }
                    current = current.rightChild;
                }
            }
        }
    }

    public Node find(int key) {
        Node current = root;
        while (current.key != key) {
            if (key < current.key) {
                current = current.leftChild;
            } else {
                current = current.rightChild;
            }
            if (current == null) {
                return null;
            }
        }
        return current;
    }

    public void inOrderTraversal(Node node) {
        if (node != null) {
            inOrderTraversal(node.leftChild);
            System.out.println(node.key + ": " + node.value);
            inOrderTraversal(node.rightChild);
        }
    }

    public void preOrderTraversal(Node node) {
        if (node != null) {
            System.out.println(node.key + ": " + node.value);
            preOrderTraversal(node.leftChild);
            preOrderTraversal(node.rightChild);
        }
    }

    public void postOrderTraversal(Node node) {
        if (node != null) {
            postOrderTraversal(node.leftChild);
            postOrderTraversal(node.rightChild);
            System.out.println(node.key + ": " + node.value);
        }
    }

    public static void main(String[] args) {
        BinaryTree tree = new BinaryTree();

        tree.insert(50, "John");
        tree.insert(25, "Alice");
        tree.insert(75, "Bob");
        tree.insert(15, "Chris");
        tree.insert(33, "Diana");
        tree.insert(60, "Emily");
        tree.insert(90, "Fred");

        Node node = tree.find(33);
        System.out.println("Find key: " + node.key + ", value: " + node.value);

        System.out.println("In-order traversal:");
        tree.inOrderTraversal(tree.root);

        System.out.println("Pre-order traversal:");
        tree.preOrderTraversal(tree.root);

        System.out.println("Post-order traversal:");
        tree.postOrderTraversal(tree.root);
    }
}
Salin selepas log masuk

Kod pokok binari di atas merangkumi tiga fungsi utama: memasukkan nod, mencari nod dan tiga kaedah traversal yang berbeza. Nod sisipan menggunakan gelung sementara untuk memasukkan data dalam susunan pepohon perduaan menggunakan gelung sementara untuk melintasi pepohon untuk mencari data sasaran dilaksanakan secara rekursif;

3. Kaedah traversal pokok binari

Dalam kod Java di atas, program ini melaksanakan tiga kaedah traversal pokok binari yang berbeza: traversal tertib, traversal prapesan dan traversal pasca pesanan. Bahagian ini akan memperkenalkan ketiga-tiga kaedah traversal ini satu persatu.

  1. Traversal tertib

Traversal tertib melintasi nod dalam pokok mengikut tertib dari kecil ke besar. Dalam kod Java, pelaksanaan traversal tertib menggunakan rekursi: untuk setiap nod, mula-mula panggil nod kirinya sendiri, kemudian cetak data nod, dan akhirnya panggil nod kanannya sendiri. Dengan cara ini, semua nod dalam pokok boleh dilalui mengikut urutan dari kecil ke besar.

  1. Prepesan traversal

Prapesan traversal merentasi nod dalam pepohon dalam susunan nod induk, nod kiri dan nod kanan. Dalam kod Java, pelaksanaan traversal prapesanan juga menggunakan rekursi: untuk setiap nod, mula-mula cetak data nod, kemudian panggil nod kirinya sendiri, dan akhirnya panggil nod kanannya sendiri. Dengan cara ini, semua nod dalam pokok boleh dilalui dalam susunan nod induk, nod kiri dan nod kanan.

  1. Traversal pasca pesanan

Traversal pasca pesanan melintasi nod dalam pepohon dalam susunan nod kiri, nod kanan dan nod induk. Dalam kod Java, pelaksanaan traversal pasca pesanan juga menggunakan rekursi: untuk setiap nod, mula-mula panggil nod kirinya sendiri, kemudian panggil nod kanannya sendiri, dan akhirnya mencetak data nod. Dengan cara ini, semua nod dalam pokok boleh dilalui dalam susunan nod kiri, nod kanan dan nod induk.

4. Algoritma pokok binari yang biasa digunakan

Pokok binari ialah struktur data yang fleksibel dan sangat berguna Dalam pengaturcaraan Java, algoritma pokok binari sering digunakan. Berikut ialah algoritma pokok binari yang biasa digunakan:

  1. Cari

Cari ialah salah satu fungsi pokok binari yang paling asas dan juga merupakan fungsi yang kerap digunakan. Dalam kod Java, pelaksanaan carian adalah sangat mudah: untuk setiap nod, dengan membandingkan saiz nilai nod dan nilai sasaran, cari ke bawah lapisan demi lapisan sehingga nilai sasaran ditemui atau keseluruhan pepohon dilalui.

  1. Sisipan

Sisipan ialah fungsi menambah nod baharu pada pokok binari, dan nod baharu yang dimasukkan juga akan mengikut susunan penyisihan pokok binari. Dalam kod Java, pelaksanaan sisipan juga agak mudah: bandingkan saiz nod yang akan dimasukkan dengan nod semasa, dan masukkan nod baharu apabila kedudukan yang sesuai ditemui.

  1. Padam

Pemadaman ialah fungsi mengalih keluar nod daripada pepohon binari Dalam kod Java, pelaksanaan pemadaman adalah lebih kompleks dan memerlukan lebih banyak pertimbangan. Jika nod yang dipadamkan tidak mempunyai nod anak, hanya padamkannya secara langsung jika terdapat hanya satu nod anak, hanya alihkan nod anak ke kedudukan nod yang dipadamkan itu mempunyai dua nod anak, anda perlu mencari minimum nilai nod anak kanan, menggantikan lokasi nod yang dipadamkan.

5. Ringkasan

Artikel ini memperkenalkan struktur data pokok binari di Jawa secara terperinci, termasuk definisi pokok binari, pelaksanaan nod dan kelas pokok binari, tiga kaedah traversal yang berbeza dan lazimnya menggunakan algoritma pokok binari. Pokok binari ialah struktur data yang digunakan secara meluas, dan Java menyediakan banyak fungsi dan perpustakaan kelas untuk membantu dalam pelaksanaan pokok binari. Apabila pengaturcaraan di Java, mahir dalam penggunaan dan pelaksanaan pepohon binari boleh meningkatkan kecekapan program dan ketepatan pertanyaan data.

Atas ialah kandungan terperinci Penjelasan terperinci tentang struktur pokok binari di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bandingkan struktur data kompleks menggunakan perbandingan fungsi Java Bandingkan struktur data kompleks menggunakan perbandingan fungsi Java Apr 19, 2024 pm 10:24 PM

Apabila menggunakan struktur data kompleks dalam Java, Comparator digunakan untuk menyediakan mekanisme perbandingan yang fleksibel. Langkah-langkah khusus termasuk: mentakrifkan kelas pembanding, menulis semula kaedah bandingkan untuk menentukan logik perbandingan. Buat contoh pembanding. Gunakan kaedah Collections.sort, menghantar contoh koleksi dan pembanding.

Struktur dan algoritma data Java: penjelasan mendalam Struktur dan algoritma data Java: penjelasan mendalam May 08, 2024 pm 10:12 PM

Struktur data dan algoritma ialah asas pembangunan Java Artikel ini meneroka secara mendalam struktur data utama (seperti tatasusunan, senarai terpaut, pepohon, dll.) dan algoritma (seperti pengisihan, carian, algoritma graf, dll.) dalam Java. Struktur ini diilustrasikan dengan contoh praktikal, termasuk menggunakan tatasusunan untuk menyimpan skor, senarai terpaut untuk mengurus senarai beli-belah, tindanan untuk melaksanakan rekursi, baris gilir untuk menyegerakkan benang, dan pepohon dan jadual cincang untuk carian dan pengesahan pantas. Memahami konsep ini membolehkan anda menulis kod Java yang cekap dan boleh diselenggara.

Pemahaman mendalam tentang jenis rujukan dalam bahasa Go Pemahaman mendalam tentang jenis rujukan dalam bahasa Go Feb 21, 2024 pm 11:36 PM

Jenis rujukan ialah jenis data khas dalam bahasa Go Nilai mereka tidak menyimpan data itu sendiri secara langsung, tetapi alamat data yang disimpan. Dalam bahasa Go, jenis rujukan termasuk kepingan, peta, saluran dan penunjuk. Pemahaman mendalam tentang jenis rujukan adalah penting untuk memahami pengurusan memori dan kaedah pemindahan data bahasa Go. Artikel ini akan menggabungkan contoh kod khusus untuk memperkenalkan ciri dan penggunaan jenis rujukan dalam bahasa Go. 1. Slices Slices ialah salah satu jenis rujukan yang paling biasa digunakan dalam bahasa Go.

Struktur data PHP: Keseimbangan pepohon AVL, mengekalkan struktur data yang cekap dan teratur Struktur data PHP: Keseimbangan pepohon AVL, mengekalkan struktur data yang cekap dan teratur Jun 03, 2024 am 09:58 AM

Pokok AVL ialah pokok carian binari seimbang yang memastikan operasi data yang pantas dan cekap. Untuk mencapai keseimbangan, ia melakukan operasi belok kiri dan kanan, melaraskan subpokok yang melanggar keseimbangan. Pokok AVL menggunakan pengimbangan ketinggian untuk memastikan ketinggian pokok sentiasa kecil berbanding bilangan nod, dengan itu mencapai kerumitan masa logaritma (O(logn)) operasi carian dan mengekalkan kecekapan struktur data walaupun pada set data yang besar.

Analisis penuh rangka kerja pengumpulan Java: membedah struktur data dan mendedahkan rahsia storan yang cekap Analisis penuh rangka kerja pengumpulan Java: membedah struktur data dan mendedahkan rahsia storan yang cekap Feb 23, 2024 am 10:49 AM

Gambaran Keseluruhan Rangka Kerja Koleksi Java Rangka kerja pengumpulan Java ialah bahagian penting dalam bahasa pengaturcaraan Java Ia menyediakan satu siri perpustakaan kelas kontena yang boleh menyimpan dan mengurus data. Pustaka kelas kontena ini mempunyai struktur data yang berbeza untuk memenuhi keperluan penyimpanan dan pemprosesan data dalam senario yang berbeza. Kelebihan rangka kerja koleksi ialah ia menyediakan antara muka bersatu, membolehkan pembangun mengendalikan perpustakaan kelas kontena yang berbeza dengan cara yang sama, dengan itu mengurangkan kesukaran pembangunan. Struktur data rangka kerja pengumpulan Java Rangka kerja pengumpulan Java mengandungi pelbagai struktur data, setiap satunya mempunyai ciri unik dan senario yang boleh digunakan. Berikut adalah beberapa struktur data rangka kerja pengumpulan Java yang biasa: 1. Senarai: Senarai ialah koleksi tersusun yang membolehkan elemen diulang. Li

Ketahui rahsia struktur data bahasa Go secara mendalam Ketahui rahsia struktur data bahasa Go secara mendalam Mar 29, 2024 pm 12:42 PM

Kajian mendalam tentang misteri struktur data bahasa Go memerlukan contoh kod khusus Sebagai bahasa pengaturcaraan yang ringkas dan cekap, bahasa Go juga menunjukkan daya tarikannya yang unik dalam memproses struktur data. Struktur data adalah konsep asas dalam sains komputer, yang bertujuan untuk mengatur dan mengurus data supaya ia boleh diakses dan dimanipulasi dengan lebih cekap. Dengan mempelajari secara mendalam tentang misteri struktur data bahasa Go, kami dapat memahami dengan lebih baik cara data disimpan dan dikendalikan, seterusnya meningkatkan kecekapan pengaturcaraan dan kualiti kod. 1. Array Array ialah salah satu struktur data yang paling mudah

Peta Java Didedahkan: Petua dan Strategi untuk Capaian Data Pantas Peta Java Didedahkan: Petua dan Strategi untuk Capaian Data Pantas Feb 19, 2024 pm 06:21 PM

JavaMap ialah struktur data berasaskan pasangan nilai kunci yang membolehkan pembangun menyimpan dan mendapatkan semula data dengan cepat. Kekunci Peta boleh berupa sebarang objek, dan nilainya boleh berupa sebarang jenis data. Setiap kunci dalam Peta hanya boleh dikaitkan dengan paling banyak satu nilai Jika berbilang nilai ditetapkan untuk kunci yang sama, hanya nilai set terakhir akan dikekalkan. Terdapat dua pelaksanaan utama Map: HashMap: menggunakan jadual hash untuk menyimpan pasangan nilai kunci. Prestasi HashMap bergantung pada cara jadual cincang dilaksanakan dan dalam kebanyakan kes HashMap berprestasi lebih baik daripada TreeMap. TreeMap: menggunakan pokok merah-hitam untuk menyimpan pasangan nilai kunci. Prestasi TreeMap adalah serupa dengan HashMap, tetapi dalam beberapa kes, prestasi TreeMap boleh

Struktur data PHP SPL: Menyuntik kelajuan dan fleksibiliti ke dalam projek anda Struktur data PHP SPL: Menyuntik kelajuan dan fleksibiliti ke dalam projek anda Feb 19, 2024 pm 11:00 PM

Gambaran Keseluruhan Perpustakaan Struktur Data PHPSPL Pustaka struktur data PHPSPL (Perpustakaan Standard PHP) mengandungi satu set kelas dan antara muka untuk menyimpan dan memanipulasi pelbagai struktur data. Struktur data ini termasuk tatasusunan, senarai terpaut, tindanan, baris gilir dan set, setiap satunya menyediakan set kaedah dan sifat khusus untuk memanipulasi data. Tatasusunan Dalam PHP, tatasusunan ialah koleksi tertib yang menyimpan jujukan elemen. Kelas tatasusunan SPL menyediakan fungsi yang dipertingkatkan untuk tatasusunan PHP asli, termasuk pengisihan, penapisan dan pemetaan. Berikut ialah contoh menggunakan kelas tatasusunan SPL: useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

See all articles