TREE
TREE
TREE (POHON)
Tree (pohon) merupakan struktur data non linier, struktur pohon
mengelola data sehingga item‐item informasi terhubung lewat
cabang‐cabang pohon tersebut.
1. Terminologi
Root Level
v0 A ............................................................ 0
e0 e1 e2
v1 B v2 C v3 D .................................. 1
E F G H I ................ 2
J K L M N ......................... 3
‐ Pohon merupakan himpunan vertex (simpul/node/titik) dan
edge (sisi/arc/busur) di mana salah satu simpul, yaitu simpul
paling atas (pada gambar di atas adalah simpul A) merupakan
root (akar).
‐ Simpul dinotasikan dengan lambang V (vertex), sedangkan edge
dinatasikan dengan e. Jika jumlah simpul adalah n dan jumlah
busur adalah m, maka m=n‐1.
‐ T=(V,E)
1
Widodo
Struktur Data
Struktur simpul tersebut dapat dibuat dengan:
typedef struct Node {
int INFO;
struct Node *Link1;
struct Node *Link2;
struct Node *Link3;
}
typedef struct Node Simpul;
Untuk binary tree (pohon biner) berarti hanya ada 2 link, sehingga
link1 bisa dianggap sebagai Left (L), dan link2 bisa dianggap
sebagai Right (R). Sehingga struktur simpulnya dapat dibuat
sebagai berikut:
typedef struct Node {
int INFO;
struct Node *Right;
struct Node *Left;
}
typedef struct Node Simpul;
‐ Link adalah sebuah pointer yang digunakan untuk menunjuk
simpul subordinat. Jika pohon adalah pohon biner, maka Left
merupakan pointer yang menunjuk subordinat kiri, sedangkan
Right merupakan pointer yang menunjuk subordinat kanan.
‐ Null‐Link adalah pointer yang tidak menunjuk simpul subordinat
karena memang tidak memiliki simpul subordinat.
Konversi pohon M‐ary ke pohon biner
Misalkan pohon 3‐ary pada contoh di atas akan dijadikan pohon
biner, maka langkahnya adalah:
Simpul A memiliki 3 anak, yaitu simpul B,C, dan D. Ubah garis
strukturnya dengan hanya menghubungkan simpul A kepada
simpul B yang dianggap sebagai anak tertua melalui garis hubung
kiri, sedangkan anak lain dihubungkan dengan simpul B yaitu
simpul C menjadi subordinat kanan dari simpul B sedangkan simpul
3
Widodo
Struktur Data
4
Widodo
Struktur Data
‐ Pada pohon complete binary tree berlaku:
Pada level k, jumlah simpul n=2^k
Untuk pohon dengan kedalaman d, maka jumlah seluruh
simpul, n=2^(d+1)‐1
Untuk pohon dengan kedalaman d, maka jumlah simpul daun
adalah n=2^d, jumlah simpul bukan daun adalah n=(2^d)‐1
Jika jumlah total simpul adalah n, maka kedalaman pohon
adalah d=log2(n+1)‐1
‐ Almost Complete Binary Tree adalah pohon biner yang pada
kedalaman di bawah level 1 setiap simpul harus memiliki
subordinat kanan dan kiri. Jika pada level d‐1 subpohon kanan
ada yang memiliki subordinat, maka setiap simpul pada level d‐1
subpohon kiri harus memiliki subordinat kanan dan kiri.
‐
A
B C
D E F G
J K J K J J
‐ Pohon Biner Seimbang (Balanced Binary Tree), adalah pohon
biner yang kedalaman subpohon kiri dan subpohon kanan paling
banyak berselisih satu.
4. Penomoran Simpul Pohon Biner
Jika sebuah simpul memiliki nomor n, maka subordinat kirinya
memiliki nomor simpul 2n, dan subordinat kanan memiliki nomor
simpul 2n+1. Simpul akar diberi nomor 1.
5
Widodo
Struktur Data
11 14
10 G H I
Pohon tersebut dapat direpresentasikan ke dalam array berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
A B C D E F G H I
Dengan penomoran ini, untuk menyimpan sebuah pohon biner
dengan kedalaman = d, diperlukan array satu dimensi dengan
jumlah elemen minimal sebanyak 2^(d+1)‐1 elemen.
5. Pembuatan Sebuah Simpul
void BuatSimpul(char x)
{ P=(Simpul*) malloc(sizeof(Simpul))
if(P!=NULL)
{ P->INFO=x;
P->Left=NULL;
P->Right=NULL;
}
else
{ printf(“Pembuatan simpu gagal”);
}
}
6
Widodo
Struktur Data
6. Membuat sebuah simpul menjadi akar (root)
void BuatSimpulAkar()
{ if(Root==NULL)
{ if(P!=NULL)
{ Root=P;
Root->Left=NULL;
Root->Right=NULL;
}
else
printf(“\n Simpul belum dibuat”);
}
else
printf(“\n pohon sudah ada”);
}
7. Insert (menambahkan) simpul ke pohon urut nomor
void InsertUrutNomor()
{ int i,j,flag;
char X;
flag=0; i=1; j=1;
Q[i]=Root;
while(flag==0 && j<127)
{ X=getch;
if(X!=’0’)
{ BuatSimpul(X);
Current=Q[i];
Current->Left=P;
j++;
Q[j]=P;
}
else \\ data habis
{ flag=1;
j++;
Q[j]=NULL;
}
if(flag==0)
{ X=getch;
if(X!=’0’)
{ BuatSimpul(X);
Current->Right=P;
j++; Q[j]=P; }
else \\ data habis
{ flag=1;
j++;
7
Widodo
Struktur Data
Q[j]=NULL;
}
i++;
}
Program utamanya (main program) dapat dibuat berikut:
main()
{ int i,j, flag;
char X;
system(“cls”);
Inisialisasi();
X=getch();
BuatSimpul(X);
BuatSimpulAkar();
InsertUrutNomor();
}
8.
9.
8
Widodo