Pohon biner: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Xevior (bicara | kontrib)
Tidak ada ringkasan suntingan
Xevior (bicara | kontrib)
Tidak ada ringkasan suntingan
Baris 25:
Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan dari sudut tidak lebih dari 3. Ini dapat ditunjukan bahwa dalam pohon biner manapun, terdapat persis dua atau lebih simpul dengan tingkat satu daripada yang terdapat dengan tingkat tiga, tetapi bisa terdapat angka apa saja dari simpul dengan tingkat dua. Sebuah '''pohon biner berakar''' merupakan sebuah grafik yang mempunyai satu dari sudutnya dengan tingkat tidak lebih dari dua sebagai akar.
 
Dengan akar yang dipilih, setiap sudut akan memiliki ayah khusus, dan diatas dua anak; bagaimanapun juga, sejauh ini terdapat keterbatasan informasi untuk membedakan antara anak kiri atau kanan. Jika kita membuang keperluan yg tak terkoneksi, membolehkan bermacam koneksi dalam komponen di gafik, kita memanggil struktur sebuah [[Pohon (struktur data)#Hutan|hutan]].
 
Sebuah jalan lain untuk mendefinisikan pohon biner melalui definisi [[rekursif]] pada grafik langsung. Sebuah pohon biner dapat berarti:
* Sebuah sudut tunggal.
* Sebuah graf yang dibentuk dengan mengambil dua pohon biner, menambahkan sebuah sudut, dan menambahkan sebuah panah langsung dari sudut yang baru ke akar daris setiap pohon biner.
Ini juga tidak menentujan susunan anak, tetapi memperbaiki akar tertentu.
 
== Kombinatorik ==
Kelompok dari sepasang simpul dalam sebuah pohon dapat digambarkan sebagai pasangan dari [[aksara]] dalam tanda kurung. Oleh sebab itu, ''(a,b)'' menunjukan pohon biner dimana sub pohon kirinya adalah ''a'' sedangkan sub pohon kanannya adalah ''b''. Benang dari tanda kurung yang seimbang mungkin dapat digunakan untuk menunjukan pohon biner pada umumnya. Himpunan dari semua benang yang mungkin yang terdiri dari keseluruhan tanda kurung yang seimbang dikenal sebagal [[bahasa Dyck]].
 
Diketahui ''n+1'' simpul, jumlah seluruh jalan dimana simpul tersebut dapat disusun kedalam sebuah pohon biner dengan sebuah [[bilangan Catalan]] <math>C_n</math>. Sebagai contoh, <math>C_2=2</math> adalah pernyataan bahwa ''(ab)c'' dan ''a(bc)'' merupakan dua pohon biner yang mungkin, yang memiliki 3 simpul.
 
Kemampuan untuk menggambarkan pohon biner sebagai benang dari simbol-simbol dan tanda kurung secara tidak langsung menyatakan bahwa pohon biner dapat mewakili elemen dari [[magma (algebra)|magma]]. Sebaliknya, himpunan dari semua pohon biner yang mungkin, bersama-sama dengan operasi natural memasangkan pohon dari satu ke yang lain, dari sebuah magma, [[magma bebas]].
 
Memberikan benang yang menggambarkan sebuah pohon biner, operator untuk mendapatkan sub pohon kiri dan kanan kadang-kadang mengacu sebagai [[CAR dan CDR]].
 
== Metode untuk menyimpan pohon biner ==
Pohon biner dapat dikonstruksi dari [[bahasa pemrograman]] primitif dalam berbagai cara. Dalam bahasa yang menggunakan [[record (ilmu komputer)|records]] dan [[referensi]], pohon biner secara khas dikonstruksi dengan mengambil sebuah struktur simpul pohon yang memuat beberapa data dan referensi ke anak kiri dan anak kanan. Kadang-kadang itu juga memuat sebuah referensi ke ayahnya yang khas. Jika sebuah simpul mempunyai kurang dari dua anak, beberapa penunjuk anak dapat diatur kedalam nilai nol khusus, atau ke sebuah simpul [[sentinel]].
 
Pohon biner dapat juga disimpan sebagai [[struktur data implisit]] dalam [[array]], dan jika pohon tersebut merupakan sebuah pohon biner lengkap, metode ini tidak boros tempat. Dalam penyusunan yang rapat ini, jika sebuah simpul memiliki indeks ''i'', anaknya dapat ditemukan pada indeks ke-2''i''+1 dan 2''i''+2, meskipun ayahnya (jika ada) ditemukan pada indeks ''[[Fungsi lantai|lantai]]((i-1)/2)'' (asumsikan akarnya memiliki indeks kosong). Metode ini menguntungkan dari banyak penyimpanan yang rapat dan memiliki referensi lokal yang lebih baik, tersitimewa selama sebuah ''preorder traversal''. Bagaimanapun juga, ini terlalu mahal untuk perkembangannya dan boros tempat sebanding dengan 2<sup>''h''</sup> - ''n'' untuk sebuah pohon dengan tinggi ''h'' dengan ''n''simpul.
 
<center>[[Image:Binary tree in array.svg|300px|Sebuah pohon biner lengkap kecil disimpan dalam array]]</center>
 
Dalam bahasa dengan ''[[tagged union]]'' seperti [[Bahasa pemrograman ML|ML]], sebuah simpul pohon seringkali sebuah ''tagged union'' dari dua jenis simpul, dimana yang satu merupakan data dari 3-tupel, anak kiri, dan anak kanan, dan yang lain dimana sebuah daun, yang tidak memuat data dan fungsi seperti nilai nol dalam bahasa dengan ''penunjuk (pointers)''
 
== Metode iterasi pohon biner ==
Seringkali, seseorang berkeinginan untuk mengunjungi simpul dalam pohon dan menjalankan perintahnya disana. Terdapat beberapa penyusunan umum dimana simpul-simpuk tersebut dapat dikunjungi, dan setiap simpul memiliki sifat-sifat yang berguna yang dimanfaatkan dalam algoritma yang berdasarkan pada pohon biner.
 
=== Pre-order, in-order, dan post-order traversal ===
 
 
Pre-order, in-order, dan post-order traversal mengunjungi setiap simpul dalam sebuah pohon dengan pengunjungan secara berulang-ulang pada sub pohon kiri dan kanan dari akarnya. Jika akarnya dikunjungi sebelum sub pohonnya, ini merupakan preoder. Jika akarnya dikunjungi sesudah sub pohonnya, ini dinamakan postorder dan jika akarnya dikunjungi diantara sub pohonnya, dinamakan inorder. In-order traversal sangat berguna dalam [[pohon biner terurut]], dimana ''traversal'' ini mengunjungi simpul dalam urutan yang meningkat.
 
=== Depth-first order ===
Dalam ''Depth-first order'', kita selalu berusaha sebisa mungkin untuk mengunjungi simpul terjauh dari akar, tetapi dengan peringatan bahwa itu haruslah sebuah simpul anak yang telah dikunjungi. Tidak seperti pencarian ''depth-first order'' dalam graf, tidak diperlukan untuk mengingat seluruh simpul yang telah dikunjungi, karena sebuah pohon tidak dapat memuat siklus. ''Pre-order'' merupakan kasus khusus untuk ini.
 
=== Breadth-first order ===
Dibandingkan dengan ''depth-first order'', ''breadth-first order'', yang selalu berusaha untuk mengnjungi simpul terdekat dengan akar yang belum dikunjunginya.
 
[[Kategori:Struktur data]]