Tree dan Kawan-kawan (Programming)

58
Binary Tree==BST ?

Transcript of Tree dan Kawan-kawan (Programming)

Page 1: Tree dan Kawan-kawan (Programming)

Binary Tree==BST

?

Page 2: Tree dan Kawan-kawan (Programming)

Untuk mengetahui apakah sebuah binary

tree adalah BST,salah satu caranya adalah

dengan melakukanprint in order

BST : Binary Search Tree

Page 3: Tree dan Kawan-kawan (Programming)

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.

Page 4: Tree dan Kawan-kawan (Programming)

10

3 15

216

9

7

141

2

Binary Tree

Page 5: Tree dan Kawan-kawan (Programming)

Apakah binary tree di atas adalah

BST ?

Page 6: Tree dan Kawan-kawan (Programming)

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

Page 7: Tree dan Kawan-kawan (Programming)

8

7

2

10

3 9 22

Binary Tree

Page 8: Tree dan Kawan-kawan (Programming)

Apakah binary tree di atas adalah

BST ?

Page 9: Tree dan Kawan-kawan (Programming)

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

Page 10: Tree dan Kawan-kawan (Programming)

Tampilan Program

Page 11: Tree dan Kawan-kawan (Programming)

BST balance

?

Page 12: Tree dan Kawan-kawan (Programming)

Untuk mengetahui apakah sebuah BST

balance dapat diketahui dengan melakukan pengecekkan tinggi

sebuah node

Page 13: Tree dan Kawan-kawan (Programming)

Mencari tinggi (height)

sebuah node ?

Page 14: Tree dan Kawan-kawan (Programming)

Tinggi sebuah node :

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

Jika nodenya adalah NULL, maka tingginya -1.

Page 15: Tree dan Kawan-kawan (Programming)

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

Page 16: Tree dan Kawan-kawan (Programming)

BST tidak balance jika:Ada node yang

tinggi node kirinyadikurang

tinggi node kanannyatidak sama dengan

-1, 0, 1

Page 17: Tree dan Kawan-kawan (Programming)

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.

Page 18: Tree dan Kawan-kawan (Programming)

Tampilan Program

Page 19: Tree dan Kawan-kawan (Programming)

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.

Page 20: Tree dan Kawan-kawan (Programming)

Tampilan Program

Page 21: Tree dan Kawan-kawan (Programming)

Tree traversal BFS,gunakan queue

?

Page 22: Tree dan Kawan-kawan (Programming)

Tree traversal dengan BFS artinya menampilkan

semua isi nodeLevel 0 Level n-1

BFS : Breadth-first search

Page 23: Tree dan Kawan-kawan (Programming)

Langkah-langkahtree traversal dengan

BFSdengan bantuan

queue

Page 24: Tree dan Kawan-kawan (Programming)

•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.

Page 25: Tree dan Kawan-kawan (Programming)

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

8

3

2

1

10

7 9 22

Page 26: Tree dan Kawan-kawan (Programming)

Lakukan tree traversal pada

tree di atas

Page 27: Tree dan Kawan-kawan (Programming)

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

Page 28: Tree dan Kawan-kawan (Programming)

Tampilan Program

Page 29: Tree dan Kawan-kawan (Programming)

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

?

Page 30: Tree dan Kawan-kawan (Programming)

AVL tree adalah tree yang balance

Bagaimana tree yang balance?

Page 31: Tree dan Kawan-kawan (Programming)

Setiap kali menginputkan sebuah node baru, kita

akan periksa apakah treenya sudah balance

atau belum,

Jika belum, maka :

Page 32: Tree dan Kawan-kawan (Programming)

Ada empat cara untuk menyeimbangkan sebuah tree:

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

Page 33: Tree dan Kawan-kawan (Programming)

A

B

D C

Node

TMP

A

C

Node

Node

Seimbangkan BST berikut

Rotate LeftBST sudah balance

Page 34: Tree dan Kawan-kawan (Programming)

Seimbangkan BST berikut

Rotate Right

B

D

A

C

Node

TMP

D

ANode

Node

BST sudah balance

Page 35: Tree dan Kawan-kawan (Programming)

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

Page 36: Tree dan Kawan-kawan (Programming)

Tampilan Program

Page 37: Tree dan Kawan-kawan (Programming)

Path pencarian nilaisuatu BST

?

Page 38: Tree dan Kawan-kawan (Programming)

Langkah-langkah mencari suatu nilai

pada BST dan menampilkan path

pencariannya

Page 39: Tree dan Kawan-kawan (Programming)

• 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

Page 40: Tree dan Kawan-kawan (Programming)

Node pertama yang diperiksa adalah root.

20

11 24

5 18 22 30

root

Page 41: Tree dan Kawan-kawan (Programming)

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...!!

Page 42: Tree dan Kawan-kawan (Programming)

Cari angka22

dari BST di atas

Page 43: Tree dan Kawan-kawan (Programming)

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

Page 44: Tree dan Kawan-kawan (Programming)

Cari angka8

dari BST di atas

Page 45: Tree dan Kawan-kawan (Programming)

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

Page 46: Tree dan Kawan-kawan (Programming)

Langkah di atas hanya bisa dilakuakan jika :

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

Page 47: Tree dan Kawan-kawan (Programming)

LCA pada BST

?

Page 48: Tree dan Kawan-kawan (Programming)

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).

Page 49: Tree dan Kawan-kawan (Programming)

•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

Page 50: Tree dan Kawan-kawan (Programming)

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

10

3 15

216

9

7

141

2

Page 51: Tree dan Kawan-kawan (Programming)

Cari LCA dari 1 dan 14

Page 52: Tree dan Kawan-kawan (Programming)

Periksa root

10

1 lebih kecil dari 10 dan 14 lebih besar dari 10

Maka LCA dari 1 dan 14 adalah 10

Page 53: Tree dan Kawan-kawan (Programming)

Cari LCA dari 3 dan 9

Page 54: Tree dan Kawan-kawan (Programming)

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

Page 55: Tree dan Kawan-kawan (Programming)

Tampilan Program

Page 56: Tree dan Kawan-kawan (Programming)

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

Page 57: Tree dan Kawan-kawan (Programming)

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

Page 58: Tree dan Kawan-kawan (Programming)

Oleh

Muhammad Fahrul Razi5113100105Teknik InformatikaInstitut Teknologi Sepuluh November