Monday, May 4, 2020

AVL Tree

AVL Tree

AVL adalah balanced binary search tree dimana ia memiliki perbedaan jumlah node pada subtree kiri dan subtree kanannya maksimal 1 (atau dapat dikatakan antara tingginya sama atau selisih satu).
contohnya:



cara menentukan Height dan balance factor:
- Jika node(root) tidak memiliki subtree heightnya = 0
    - Jika node adalah leaf, height = height tertinggi dari anak +1

Balance factor : 
- selisih height antara anak kiri dan kanan, jika tidak memiliki anak, dianggap 0.

Insertion

untuk menjaga tree tetap seimbang, setelah penyisipan sebuah node, dilakukan pemeriksaan dari node baru -> root. Node pertama yang memiliki[balance factor]>1 diseimbangkan. proses penyeimbangan dilakukan dengan: Single rotation dan double rotation.

terdapat 4 kasus tidak balance, yaitu:
1. Node yang terdalam terletak di sebelah left subtree dari left child node T (LL)
2. Node yang terdalam terletak di sebelah right subtree dari right child node T (RR)
3. Node yang terdalam terletak di sebelah left subtree dari right child node T (LR)
4. Node yang terdalam terletak di sebelah right substree dari left child node T (Rl)
terdapat 2 cara penyelesaian:
- Single Rotation (Kasus 1 & 2)
- Double Rotation (kasus 3 & 4)

Single Rotation

Single rotation dilakukan apabila searah, keft-left atau right-right
gambaran single rotation

Double Rotation

Double rotation dilakukan apabila searah, left-right atau right-left.
gambaran Double Rotation 
                                  Step 1(Rotasi pertama)
                               kasus diatas adalah left-right
                                    Step 2(Rotasi kedua)
                                    kasus diatas, left-left

Deletion

Operasi penghapusan node sama seperti pada Binary Search Tree, yaitu node yang dihapus digantikan oleh node terbesar pada subtree kiri atau node terkecil pada subtree kanan. Jika yang dihapus adalah leaf, maka langsung hapus saja. Namun jika node yang dihapus memiliki child maka childnya yang menggantikannya. Namun setelah operasi penghapusan dilakukan, cek kembali apakah tree sudah seimbang atau belum, jika belum maka harus diseimbangkan kembali. Cara menyeimbangkannya pun sama seperti insertion.
delete node 60
                                         
                           

node 55 tidak seimbang, karena anak kiri 0 dan anak kanan 2, selisih 2.
diseimbangkan dengan single rotation (left-left) karena 55 ke 65 kiri dan 65 ke 70 kiri
akan tetapi, node 50 menjadi tidak seimbang, di subtree kiri 4 dan subtree  kanan 2
diseimbangkan dengan double rotation (left-right) karena dari 50 ke 25 kiri dan 25 ke 40 kanan

berikut conoth AVL yang sudah balance






1 comment:

  1. Numpang promo ya Admin^^
    ayo segera bergabung dengan kami di ionqq^^com
    dengan minimal deposit hanya 20.000 rupiah :)
    Kami Juga Menerima Deposit Via Pulsa & E-Money
    - Telkomsel
    - GOPAY
    - Link AJA
    - OVO
    - DANA
    segera DAFTAR di WWW.IONPK.ME (k)
    add Whatshapp : +85515373217 x-)

    ReplyDelete