Anda di halaman 1dari 16

LAPORAN PRAKTIKUM

ALGORITMA DAN STRUKTUR DATA


POHON BINER SEIMBANG

Kathryn Felicia
21/493256/PA/21171
31 Maret 2023

LABORATORIUM ELEKTRONIKA DASAR


DAN LABORATORIUM INSTRUMENTASI DASAR
DEPARTEMEN ILMU KOMPUTER DAN ELEKTRONIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADA
YOGYAKARTA

2023

I. TUJUAN PRAKTIKUM
1.1. Memahami keseimbangan pohon biner.
1.2. Memahami operasi-operasi dalam menyeimbangkan pohon biner.
1.3. Memahami perancangan pohon AVL (AVL tree) sebagai salah satu jenis pohon
seimbang.
II. METODE
2.1. Buatlah sebuah program yang memberikan pilihan bagi pengguna untuk:
a. Menyisipkan daun baru pada pohon AVL
Node *input_daun(Node *root, int key) if (root == NULL)
return bikin_node(key)
else
int faktor;
faktor = penyeimbang_faktor(root)
if (key < root->Idata)
root->kiri = input_daun(root->kiri, key)
else
root->kanan = input_daun(root->kanan, key)
if (faktor != 0)
faktor == penyeimbang_faktor(root)
if (abs(faktor) > 1)
root = seimbangkan(root)
return root

b. Menghapus node pada pohon AVL sesuai dengan nilai yang diinginkan
Node *hapus_node(Node *root, int key) if (root == NULL)
return root else
int faktor = penyeimbang_faktor(root) if (key < root->Idata)
root->kiri = hapus_node(root->kiri, key) else if (key > root->Idata)
root->kanan = hapus_node(root->kanan, key) else
Node *tmp1, *tmp2
if (root->kiri != NULL) tmp1 = root->kiri
if (tmp1->kanan == NULL)
root->Idata = tmp1->Idata root->kiri = tmp1->kiri
else
while (tmp1->kanan != NULL) tmp2 = tmp1
tmp1 = tmp1->kanan root->Idata = tmp1->Idata tmp2->kanan = tmp1->kiri
else
tmp1 = root
root = root->kanan free(tmp1)
if (faktor != 0)
faktor = penyeimbang_faktor(root) if (abs(faktor) > 1)
root = seimbangkan(root) return root

c. Menghitung faktor keseimbangan


tinggi_pohon(Node *root)
if (root == NULL) return -1
else
int kanan = tinggi_pohon(root->kanan) int kiri =
tinggi_pohon(root>kiri) if (kiri > kanan)
return kiri + 1 else
return kanan + 1

2.2. Diketahui data urutan suatu pohon biner memiliki urutan berikut:
Preorder: 1-4-2-7-6-9-8-11-10-5
a. Gambarkan pohon biner dari data yang diketahui.
b. Tuliskan faktor keseimbangan pada setiap node pada gambar pohon biner yang anda
buat (soal 2.a.).
c. Apakah pohon biner tersebut seimbang? Jika tidak, bagaimana pohon keseimbangan
sebagai hasil penyeimbangan dari pohon biner tersebut? Anggap pohon tersebut
sebagai pohon AVL.

Pada nomor kali ini menggunakan online simulasi pohon AVL, untuk melihat
bentuk visualisasi dari pohon biner yang dibuat

2.3. Pada sebuah pohon AVL baru, dimasukkan data secara terurut nilai-nilai berikut: 5-
10-2- 8-11-6-1-3-9
a. Tampilkan data pohon AVL secara inorder, preorder, dan postorder.
void inOrder(Node *root) if (root != NULL)
inOrder(root->kiri)
std::cout << root->Idata << " " inOrder(root->kanan)

void preOrder(Node *root) if (root != NULL)


std::cout << root->Idata << " " preOrder(root->kiri) preOrder(root-
>kanan)

void postOrder(Node *root) if (root != NULL)


postOrder(root->kiri) postOrder(root->kanan) std::cout << root->Idata
<< " "

b. Apabila nilai node yang memiliki nilai 6 dihapus, bagaimana struktur pohon
binernya? Tampilkan secara inorder, preorder, dan postorder.
c. Apabila kemudian disisipkan nilai 4, bagaimana struktur pohon binernya? Tampilkan
secara inorder, preorder, dan postorder
III. HASIL
Pada bagian kali ini program dibuat jadi satu pada nomor 1 dan 3. Berikut adalah
Source code dan hasil dari program nomor 1 dan 3:
3.1. Buatlah sebuah program yang memberikan pilihan bagi pengguna untuk:
a. Menyisipkan daun baru pada pohon AVL
b. Menghapus node pada pohon AVL sesuai dengan nilai yang diinginkan
c. Menghitung faktor keseimbangan
3.3. Pada sebuah pohon AVL baru, dimasukkan data secara terurut nilai-nilai berikut:
5-10-2- 8-11-6-1-3-9
a. Tampilkan data pohon AVL secara inorder, preorder, dan postorder.
b. Apabila nilai node yang memiliki nilai 6 dihapus, bagaimana struktur pohon
binernya? Tampilkan secara inorder, preorder, dan postorder.
c. Apabila kemudian disisipkan nilai 4, bagaimana struktur pohon binernya?
Tampilkan secara inorder, preorder, dan postorder.

Source Code :
Hasil :
1. a) Sisip daun
b) Hapus node

c) Faktor keseimbangan

2. Diketahui data urutan suatu pohon biner memiliki urutan berikut:


Preorder: 1-4-2-7-6-9-8-11-10-5
a. Gambarkan pohon biner dari data yang diketahui.
1

4
2
7
6
5 9
8
11
10

b. Tuliskan faktor keseimbangan pada setiap node pada gambar pohon biner yang anda
buat(soal 2.a.).
1 bf= -4

4 bf=-2
2
bf=0 7 bf=0
6
5 bf=1 9 bf=0
bf=0 8
bf=0 11 bf=1
10
bf=0

c. Apakah pohon biner tersebut seimbang? Jika tidak, bagaimana pohon keseimbangan
sebagai hasil penyeimbangan dari pohon biner tersebut? Anggap pohon tersebut sebagai
pohon AVL.
6

8
2
7 10
1 4
9 11
5

3. Pada sebuah pohon AVL baru, dimasukkan data secara terurut nilai-nilai
berikut: 5-10-2-8-11-6-1-3-9
a) Tampilkan data pohon AVL secara inorder, preorder, dan postorder.
Struktur pohon :
8
5 10
2 6 9 11
1

b) Apabila nilai node yang memiliki nilai 6 dihapus, bagaimana struktur pohon binernya?
Tampilkan secara inorder, preorder, dan postorder.
Struktur pohon :
8
2 10
1 5 9 11

c)Apabila kemudian disisipkan nilai 4, bagaimana struktur pohon binernya? Tampilkan


secara inorder, preorder, dan postorder

Struktur pohon :
8
2 10
1 4 9 11

3 5
IV. PEMBAHASAN
Praktikum pertemuan kelima kali ini dimulai dengan topik pembelajaran yaitu
AVL Binary Tree. Praktikum kali ini bertujuan untuk --. Adapun terdapat Latihan dan
pengujian terhadap materi pembelajaran kali ini dengan sebuah penugasan pembuatan
3 buah perintah program. Adapun program tersebut adalah sebagai berikut:
4.1. Pada program ini kita diminta untuk membuat fitur penyisipan daun pada pohon
AVL, menghapus node pada pohon AVL sesuai dengan nilai yang diinginkan, dan
yang terakhir adalah menghitung faktor keseimbangan. Pertama-tama kita terlebih
dahulu panggil library yang diperlukan. Selanjutnya kita buat sebuah struct. Struct
ini kita beri nama node. Struct ini menampung 3 buah variabel yaitu variabel data,
variabel kiri dan variabel kanan. Untuk membuat pohon biner, kita buat terlebih
dahulu fungsi untuk membuat node nya yang kita beri nama fungsinya buatnode.
Node ini memiliki parameter int kunci. Di dalam fungsi ini terdapat proses untuk
mengisi node nya. Selanjutnya adalah fungsi kedalaman dengan parameter nya
adalah temp. fungsi ini berisi proses untuk mengukur kedalaman suatu pohon.
Selanjutnya adalah fungsi faktor keseimbangan. Fungsi ini memiliki parameter
adalah temp. di dalam fungsi ini kita melakukan proses untuk menghitung faktor
keseimbangan dari pohon kita. Setelah membuat fungsi keseimbangannya, kita
lanjutkan untuk membuat fungsi rotasi pada empat kasus rotasi menyeimbangkan
pohon. Fungsi-fungsi ini menggunakan parameter bernama root. Selanjutnya adalah
fungsi untuk menyisipkan daun. Fungsi ini menggunakan parameter root dan value.
Variabel value menampung sebuah integer angka yang akan kita masukkan ke
dalam node dan menjadi nilai node nantinya. Di dalam fungsi ini kita buat proses
untuk mengisi pohon. Setelah itu kita buat juga sebuah fungsi untuk menghapus
node dengan parameter adalah root dan integer kunci. Integer kunci adalah nilai
yang dimiliki oleh sebuah node yang kita buat. Fungsi ini bertujuan untuk
menghapus node yang kita inginkan sesuai isian integer kunci yang kita buat dalam
parameter tersebut. Selanjutnya adalah fungsi untuk menampilkan nilai pada pohon
biner saya menggunakan metode preorder saja. Selanjutnya dalam main kita
deklarasikan node nya, dan memberikan nilai rootnya. Setelah itu kita dapat
melakukan perintah soal seperti menyisipkan daun, menampilkan pohon biner, dan
menampilkan faktor keseimbangannya.
4.2. Dalam program ini kita diminta untuk pertama kali menggambar pohon biner nya.
Adapun pohon biner yang tergambar adalah seperti pada gambar di atas. Pohon
tersebut tidak seimbang karena pada root nya tidak ada cabang ke sebelah kiri. Pada
setiap node juga saya sertakan faktor keseimbangannya. Berdasarkan faktor
keseimbangan pada setiap node tersebut, dapat terlihat bahwa pohon yang pada
bagian pertama tidak seimbang. Maka dari itu, pada bagian c saya melakukan proses
menyeimbangkan pohon tersebut dengan mengganti root nya juga dengan bilaingan
enam.
4.3. Pada program ini kita diminta untuk membuat sebuah pohon AVL dan
menampilkan nya secara inorder, preorder, dan postorder. Pembuatan program
nomor 3 ini memiliki persamaan dengan pembuatan program pada nomor 1 hanya
saja terdapat penambahan penyisipan nilai 4 setelah dilakukan penghapusan nilai
6 karena ingin melihat perbedaan kondisi struktur pohon Ketika terjadi
pengurangan ataupun penambahan suatu node pada suatu pohon.
V. KESIMPULAN
Adapun kesimpulan yang dapat diambil dari serangkaian kegiatan praktikum
algoritma dan struktur data pada pertemuan ini adalah :
Pohon biner seimbang adalah sebuah ide yang dimunculkan secara intuitif untuk
menyetarakan kedalaman ataupun bobot antara kedua cabang dari sebuah pohon biner.
Dari percobaan ini kita dapat melihat metode yang digunakan dalam menyeimbangkan
pohon biner yaitu operasi rotasi dan seimbangkan cabang. Pohon AVL merupakan
salah satu jenis pohon yang seimbang dengan menyoroti keseimbangan suatu pohon
biner pada kedalamannya.

VI. DAFTAR PUSTAKA

Daan Czajkowski and Qiang Chew Jew (2016). Object oriented programming in
C++. New York: Arcler Press.

Isrd Group (2007). Introduction to object oriented programming and C++. New
Delhi: Tatamcgraw Hill.

Anda mungkin juga menyukai