Struktur & Algoritma Data

Tutorial Struktur Data Pokok untuk Pemula

Tutorial Struktur Data Pokok untuk Pemula

Pengenalan

Pohon dalam perisian seperti pokok biologi, tetapi dengan perbezaan berikut:

Cabang dari pohon perisian diwakili oleh garis lurus. Contoh yang baik dari perisian yang mungkin anda gunakan adalah pohon direktori cakera keras komputer anda.

Terdapat pelbagai jenis pokok. Terdapat pokok umum dari mana pokok-pokok lain berasal. Pokok lain dihasilkan dengan memasukkan batasan ke dalam pokok umum. Contohnya, anda mungkin menginginkan pokok di mana tidak lebih daripada dua cabang berasal dari simpul; pokok seperti itu akan dipanggil Pokok Binari.  Artikel ini menerangkan pokok umum dan cara mengakses semua nodnya.

Pautan hiper untuk memuat turun kod diberikan di bahagian bawah artikel ini.

Untuk memahami contoh kod dalam artikel ini, anda perlu mempunyai pengetahuan asas dalam JavaScript (ECMAScript). Sekiranya anda tidak mempunyai pengetahuan itu, maka anda boleh mendapatkannya dari http: // www.rangkaian luas.com / Kursus ChrysanthusForcha-1 / ECMAScript-2015-.htm

Rajah Pokok Umum


'A' adalah simpul akar; ia adalah nod peringkat pertama. B, C, D berada di baris kedua; ini adalah nod peringkat kedua. E, F, G, H, I, J, K berada pada baris ketiga, dan mereka adalah nod tahap ketiga. Baris keempat akan menghasilkan nod tahap keempat, dan seterusnya.

Harta Pokok

- Semua cabang untuk semua peringkat nod, mempunyai satu sumber, iaitu simpul akar.

- Pokok mempunyai cabang N - 1, di mana N adalah jumlah nod. Gambar rajah di atas untuk pokok umum mempunyai 11 nod dan 10 cabang.

- Tidak seperti manusia, di mana setiap anak mempunyai dua orang tua, dengan perisian, setiap anak hanya mempunyai satu ibu bapa. Node akar adalah ibu bapa nenek moyang yang paling hebat. Seorang ibu bapa boleh mempunyai lebih daripada satu anak. Setiap nod, kecuali simpul akar, adalah anak.

Perbendaharaan Kata Pokok

Melintasi Semua Nod Pokok

Semua simpul pokok boleh diakses untuk membaca atau mengubah sebarang nilai nod. Walau bagaimanapun, ini tidak dilakukan dengan sewenang-wenangnya. Terdapat tiga cara untuk melakukan ini, semuanya melibatkan Depth-First Traversal seperti berikut:

1) Dalam Pesanan: Ringkasnya, dalam skema ini, subtree kiri dilintasi terlebih dahulu; kemudian, nod akar diakses; kemudian, subtree kanan dilintasi. Skema ini dilambangkan sebagai kiri-> akar-> kanan. Gambar 1 dipaparkan semula di sini untuk rujukan mudah:

Dengan mengandaikan bahawa terdapat dua adik-beradik bagi setiap nod; kemudian kiri-> akar-> kanan bermaksud, anda mengakses nod paling rendah dan paling kiri pertama, kemudian ibu bapa nod, dan kemudian saudara kanan. Apabila terdapat lebih daripada dua beradik, ambil yang pertama sebagai kiri dan selebihnya dari simpul kanan, sebagai kanan. Untuk pokok umum di atas, subtree kiri bawah diakses untuk memiliki, [EBF]. Ini adalah subtree. Ibu bapa subtree ini adalah A; jadi, A seterusnya diakses untuk memiliki [EBF] A. Seterusnya, subtree [GCHI] diakses untuk mempunyai subtree yang lebih besar, [[EBF] A [GCHI]]. Anda dapat melihat profil kiri-> root-> kanan yang menggambarkan dirinya. Subtree kiri besar ini akan mempunyai subtree, [JDK] di sebelah kanannya untuk menyelesaikan perjalanan untuk mendapatkan, [[EBF] A [GCHI]] [JDK].

2) Pra-Pesanan: Ringkasnya, dalam skema ini simpul akar diakses terlebih dahulu, kemudian subtree kiri dilintasi seterusnya, dan kemudian subtree kanan dilintasi. Skema ini dilambangkan sebagai root-> kiri-> kanan. Gambar 1 dipaparkan semula di sini untuk rujukan mudah.

Dengan mengandaikan bahawa terdapat dua adik-beradik bagi setiap nod; kemudian root-> kiri-> kanan bermaksud, anda mengakses akar terlebih dahulu, kemudian anak terdekat kiri, dan kemudian anak terdekat kanan. Apabila terdapat lebih daripada dua beradik, ambil yang pertama sebagai kiri dan selebihnya dari simpul kanan, sebagai kanan. Anak paling kiri dari anak kiri adalah yang seterusnya untuk diakses. Untuk pokok umum di atas, subtree akar adalah [ABCD]. Di sebelah kiri subtree ini, anda mempunyai subtree, [EF], memberikan urutan akses, [ABCD] [EF]. Di sebelah kanan subtree yang lebih besar ini, anda mempunyai dua subtrees, [GHI] dan [JK], memberikan urutan lengkap, [ABCD] [EF] [GHI] [JK]. Anda dapat melihat profil root-> kiri-> kanan menggambarkan dirinya.

3) Pasca Pesanan: Ringkasnya, dalam skema ini, subtree kiri dilintasi terlebih dahulu, kemudian subtree kanan dilintasi, dan kemudian root diakses. Skema ini dilambangkan sebagai akar kiri-> kanan->. Gambar 1 dipaparkan semula di sini untuk rujukan mudah.

Untuk pokok ini subtrees adalah, [EFB], [GHIC], [JKD] dan [A] yang membentuk urutan, [EFB], [GHIC], [JKD] [A]. Anda dapat melihat profil akar kiri-> kanan-> menggambarkan dirinya.

Membuat Pokok

Pohon di atas akan dibuat menggunakan ECMAScript, seperti versi terbaru JavaScript. Setiap nod adalah tatasusunan. Unsur pertama setiap array nod adalah induk nod, array lain. Selebihnya unsur simpul adalah anak simpul, bermula dari anak paling kiri. Terdapat peta ECMAScript yang menghubungkan setiap array dengan rentetan yang sesuai (huruf). Segmen kod pertama adalah: