Tree dan Kawan-kawan (Programming)

Post on 31-Jul-2015

221 views 4 download

Transcript of Tree dan Kawan-kawan (Programming)

Binary Tree==BST

?

Untuk mengetahui apakah sebuah binary

tree adalah BST,salah satu caranya adalah

dengan melakukanprint in order

BST : Binary Search Tree

Print in order, melakukan print node sebelah kiri, kemudian induknya, kemudian node sebelah kanan.m

Jika tampilan tree dalam print in order terurut dari kecil ke besar, maka tree tersebut BST, jika tidak maka tree tersebut bukan BST.

10

3 15

216

9

7

141

2

Binary Tree

Apakah binary tree di atas adalah

BST ?

Lakukan print in order pada tree di atas

10

3 15

216

9

7

141

2

1

2

3

4

5

6

7

8

9

10

1 2 3 6 7 10 14 15 219

Hasil print in order sudah urut

dari kecil ke besarMaka binary tree di atas adalah

BST

8

7

2

10

3 9 22

Binary Tree

Apakah binary tree di atas adalah

BST ?

8

7

2

10

3 9 22

Lakukan print in order pada tree di atas

1

2

3

4

5

6

7

2 227 3 8 9 10

Hasil print in order tidak urut

dari kecil ke besarMaka binary tree di atas bukan

BST

Tampilan Program

BST balance

?

Untuk mengetahui apakah sebuah BST

balance dapat diketahui dengan melakukan pengecekkan tinggi

sebuah node

Mencari tinggi (height)

sebuah node ?

Tinggi sebuah node :

Nilai terbesar antara tinggi node kanan dan tinggi node kiri ditambah 1.

Jika nodenya adalah NULL, maka tingginya -1.

10

15

21

Tinggi Node 21• Node kirinya NULL = -1• Node kanannya NULL = -1• Nilai terbesar di antara

keduanya adalah -1• Tinggi node 21 adalah

-1+1=0

10

2

Tinggi Node 15• Node kirinya NULL = -1• Node kanannya = 0• Nilai terbesar di antara

keduanya adalah 0• Tinggi node 15 adalah

0+1=1

Tinggi Node 10• Node kirinya NULL = -1• Node kanannya = 1• Nilai terbesar di antara

keduanya adalah 1• Tinggi node 10 adalah

1+1=2

BST tidak balance jika:Ada node yang

tinggi node kirinyadikurang

tinggi node kanannyatidak sama dengan

-1, 0, 1

10

3

15

21

14

1

-1-(-1)=0

-1-(0)=-1

-1-(1)=-2

-1-(-1)=0

1-2=-1

0-(-1)=1

Apakah BST berikut balance?10, 3, 14, 15, 1, 21

Ada node yang tinggi kiri dikurang tinggi kanannyatidak sama dengan -1, 0 , 1.Berarti BST ini tidak balance.

Tampilan Program

Apakah BST berikut balance?8, 3 ,10, 22, 9, 2, 1, 7

8

3

2

1

10

7 9 22-1-(-1)=0-1-(-1)=0-1-(-1)=0

-1-(-1)=0

0-0=0

0-(-1)=1

1-0=1

2-1=1

Tidak ada node yangtinggi kirinya dikurang tinggi kanannyadi luar dari -1, 0 , 1.Berarti BST ini balance.

Tampilan Program

Tree traversal BFS,gunakan queue

?

Tree traversal dengan BFS artinya menampilkan

semua isi nodeLevel 0 Level n-1

BFS : Breadth-first search

Langkah-langkahtree traversal dengan

BFSdengan bantuan

queue

•Inisialisasi isi node pertama queue dengan

root (front).

•Ulang selama queue tidak kosong.

oJika node (front) sebelah kiri tidak kosong,

masukkan datanya ke dalam queue.

oJika node (front) sebelah kanan tidak

kosong, masukkan datanya ke dalam queue.

oDequeue dan tampilkan node front.

8, 3 ,10, 22, 9, 2, 1, 7

8

3

2

1

10

7 9 22

Lakukan tree traversal pada

tree di atas

32 1078 10

Isi queue dengan root

8

Karena queue tidak kosong, maka :Node sebelah kiri 8 tidak kosong, masukkan queueNode sebelah kanan 8 tidak kosong, masukkan queueKeluarkan dan tampilkan 8

8

3 10

8

3

2 7

72

Karena queue tidak kosong, maka :Node sebelah kiri 3 tidak kosong, masukkan queueNode sebelah kanan 3 tidak kosong, masukkan queueKeluarkan dan tampilkan 3

3

10

9 22

Karena queue tidak kosong, maka :Node sebelah kiri 10 tidak kosong, masukkan queueNode sebelah kanan 10 tidak kosong, masukkan queueKeluarkan dan tampilkan 10

9 2210 9 22

2

1Karena queue tidak kosong, maka :Node sebelah kiri 2 tidak kosong, masukkan queueNode sebelah kanan 2 kosongKeluarkan dan tampilkan 2

1

2

Karena queue tidak kosong, maka :Node sebelah kiri 7 kosongNode sebelah kanan 7 kosongKeluarkan dan tampilkan 7

77

9

Karena queue tidak kosong, maka :Node sebelah kiri 9 kosongNode sebelah kanan 9 kosongKeluarkan dan tampilkan 9

9

22

Karena queue tidak kosong, maka :Node sebelah kiri 22 kosongNode sebelah kanan 22 kosongKeluarkan dan tampilkan 22

22

1

Karena queue tidak kosong, maka :Node sebelah kiri 1 kosongNode sebelah kanan 1 kosongKeluarkan dan tampilkan 1

1

Queue sudah kosong, maka proses traversal sudah selesai

Tampilan program3

Tampilan Program

AVL Tree1, 26, 2, 25, 3, 24, 4, 23, 5, 22, 6

?

AVL tree adalah tree yang balance

Bagaimana tree yang balance?

Setiap kali menginputkan sebuah node baru, kita

akan periksa apakah treenya sudah balance

atau belum,

Jika belum, maka :

Ada empat cara untuk menyeimbangkan sebuah tree:

1.Rotate Left2.Rotate Right3.Rotate Right Left4.Rotate Left Right

A

B

D C

Node

TMP

A

C

Node

Node

Seimbangkan BST berikut

Rotate LeftBST sudah balance

Seimbangkan BST berikut

Rotate Right

B

D

A

C

Node

TMP

D

ANode

Node

BST sudah balance

126 2253

244

235

226 Rotate Right LeftRotate Right

1

26

2

2

261

25

3

2

251

3 26

24

2 25

1

3

2624

4

23

Rotate Left Right

2 25

1

3

2623

4 24

5

2 23

1

3

254

5 2624

22

Rotate Left

2 23

1

3

255

4 262422

6

2

23

1

3

25

5

4

2624

22

6

Semua input sudah dimasukkan. Tree di atas adalah hasilnya, berupa

AVL tree dan tentunya sudah balance

Tampilan Program

Path pencarian nilaisuatu BST

?

Langkah-langkah mencari suatu nilai

pada BST dan menampilkan path

pencariannya

• Tampilkan node yang diperiksa• Jika nilai node sama dengan X, X ditemukan. Kalau

tidak,• Jika nilai node lebih besar dari X dan node di

sebelah kiri adalah NULL, atauJika nilai node lebih kecil dari X dan node di sebelah kanan adalah NULL, maka X tidak ditemukan, kalau tidak,• Jika nilai node lebih besar dari X, periksa node di

sebelah kiri. Kalau tidak,• Jika nilai node lebih kecil dari X, periksa node di

sebelah kanan.

Sebut saja nilai yang dicari adalah X

Node pertama yang diperiksa adalah root.

20

11 24

5 18 22 30

root

20

11 24

5 18 22 30

3 9 21 23 27 27

10

20, 11, 5, 24, 18, 30, 35, 22, 3, 21, 9, 10, 27, 23

INI BST...!!

Cari angka22

dari BST di atas

20

Node bukan NULL

Tampilkan nilai node

22 != 20

22 > 20 dan node sebelah kanan bukan NULL

22 > 20, maka periksa node sebelah kanan

20

24

Node bukan NULL

Tampilkan nilai node

22 != 24

22 < 24 dan node sebelah kiri bukan NULL

22 < 24, maka periksa node sebelah kiri

2420

24

Pertama periksa root...

22

Node bukan NULL

Tampilkan nilai node

22 == 24, nilai ditemukan dan pencarian

dihentikan.

22Tampilan program

Banyak node

Nilai yang dicari

Path pencarian

Cari angka8

dari BST di atas

Node bukan NULL

Tampilkan nilai node

8 != 9

8 < 9 dan node sebelah kiri NULL,

maka nilai tidak dapat ditemukan dan

pencarian dihentikan.

Node bukan NULL

Tampilkan nilai node

8 != 5

8 > 5 dan node sebelah kanan bukan NULL

8 > 5, maka periksa node sebelah kanan

20Pertama periksa root...

Node bukan NULL

Tampilkan nilai node

8 != 20

8 < 20 dan node sebelah kiri bukan NULL

8 < 20, maka periksa node sebelah kiri

20

11

Node bukan NULL

Tampilkan nilai node

8 != 11

8 < 11 dan node sebelah kiri bukan NULL

8 < 11, maka periksa node sebelah kiri

11

5

5

9

9

Tampilan program

Banyak node

Nilai yang dicari

Path pencarian

Langkah di atas hanya bisa dilakuakan jika :

•Tree yang digunakan adalah BST•Tidak ada dua nilai atau lebih yang sama di dalam tree

LCA pada BST

?

Lowest Common Ancestor (LCA)Let T be a rooted tree with n nodes. The lowest common ancestor between two nodes v and w is defined as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).

•Node yang pertama diperiksa adalah root•Jika :oa ≤ isi node dan b > isi node, atauob ≤ isi node dan a > isi node, atauoa == isi node dan b < isi node, atauob == isi node dan a < isi node

Tampilkan isi node•Kalau tidak, jika:oa < isi node dan b < isi node

Periksa node sebelah kiri•Kalau tidak, jika:oa > isi node dan b > isi node

Periksa node sebelah kanan

10, 3, 15, 21, 6, 9, 7, 14, 1, 2

10

3 15

216

9

7

141

2

Cari LCA dari 1 dan 14

Periksa root

10

1 lebih kecil dari 10 dan 14 lebih besar dari 10

Maka LCA dari 1 dan 14 adalah 10

Cari LCA dari 3 dan 9

Periksa root

10

9 lebih kecil dari 10 dan 3 lebih kecil dari 10

Maka periksa node sebelah kiri

3

9 lebih besar dari 3 dan 3 sama dengan 3 (node yang dicari)

Maka LCA dari 3 dan 9 adalah 3

Tampilan Program

Cara di atas hanya dapat digunakan jika :

• Tree yang digunakan adalah BST

• Tidak ada dua buah atau lebih isi node yang sama

• Dua buah node yang di cari LCAnya harus ada di dalam tree

Reference :Mark Allen Weiss, “AVL Tree”, Data Structures & Algorithm Analysis in C++, (2) 1999, 143-155

Source Code :https://www.dropbox.com/sh/7b6m3j7v3semk8y/s987IXfj4j/SC

Oleh

Muhammad Fahrul Razi5113100105Teknik InformatikaInstitut Teknologi Sepuluh November