POHON (TREE)
PAS U T R I
Inorder (Infix)
• Kunjungan secara inorder,
juga sering disebut dengan void inorder(pohon ph)
symmetric order, {
menggunakan urutan: if (ph != NULL)
Kunjungi cabang kiri {
Cetak isi simpul yang inorder(ph->kiri);
dikunjungi printf("%c", ph->info);
Kunjungi cabang kanan inorder(ph->kanan);
}
P }
A T
S U R I SAUP RTI
Postorder (Postfix)
• Kunjungan secara postorder void postorder(pohon ph)
menggunakan urutan: {
Kunjungi cabang kiri if (ph != NULL)
Kunjungi cabang kanan {
postorder(ph->kiri);
Cetak isi simpul yang
postorder(ph->kanan);
dikunjungi
printf("%c ", ph->info);
}
P
}
A T
S U R I SUA RIT P
Contoh: Pre, In, and Post Order
Contoh: Pre, In, and Post Order
Diketahui level:
54 40 66 20 50 59 75 57 62
E R
L S A I
Pre Order: T E L S R A I
In Order : L E S T A R I
Post Order: L S E A I R T
Jenis traversal tree ada 3
1. Pre Order 3. Post Order
Kunjungi simpul akar Sub kiri
Sub kiri Sub kanan
Sub kanan Kunjungi simpul akar
Contoh: Tree = (C * D) + E, maka Contoh, Tree = (C * D) + E,
Pre Order = +*CDE maka Post Order = CD*E+
2. In Order
Sub kiri
Kunjungi simpul akar
Sub kanan
C D
Contoh, Tree = (C * D) + E, maka
In Order = C*D+E
Contoh traversal
Tentukan traversal tree dari tree: [ A ^ (B - C) / (E * F) + G]
Maka:
Pre Order = /^-BCA+*EFG
In Order = B-C^A/E*F+G
Post Order = BC-A^EF*G+/
Declarasi struct
typedef char typeInfo; typedef struct Node
typedef struct Node tree; //struct Node
{
struct Node
int data; //char data;
{ Node *kiri;
typeInfo info; /*jenis data*/ Node *kanan;
tree *kiri; /* cabang kiri */ Node *parent;
tree *kanan; /* cabang kanan */ };
} Node *pohon = NULL;
Contoh 1: Program Binary Tree
//Tree_Binary //fungsi untuk menambahkan node baru
//header file void tambah (Node **root, int databaru)
#include <stdio.h> {
#include <conio.h> //jika root masih kosong
if ((*root)==NULL) {
#include <stdlib.h>
//pembuatan node baru
#include <iostream> Node *baru;
using namespace std; //alokasi memori dari node yang dibuat
baru = new Node;
//deklarasi AWAL struct sebuah tree //inisialisasi awal node yang baru dibuat
typedef struct Node baru->data=databaru;
{ baru->kiri=NULL;
int data; baru->kanan=NULL;
Node *kiri; (*root) = baru;
(*root) -> kiri = NULL;
Node *kanan;
(*root) -> kanan = NULL;
}; //jika menunjuk ke NULL artinya tidak
Node *pohon = NULL; mempunyai child
printf("Data Bertambah!"); }
Sambungan …#1
//jika data yang akan dimasukkan //fungsi yang digunakan untuk mencetak tree
lebih kecil daripada elemen root, secara preOrder
maka akan diletakkan di node void preOrder(Node *root)
sebelah kiri. {
else if (databaru<(*root)->data) if(root!=NULL)
tambah(&(*root)->kiri, {
databaru); if(root->data!=NULL)
//jika data yang akan dimasukkan {
lebih besar daripada elemen root, printf("%d ",root->data);
maka akan diletakkan di node }
sebelah kanan preOrder(root->kiri);
else if (databaru>(*root)->data) preOrder(root->kanan);
tambah(&(*root)->kanan, }
databaru); }
//jika saat dicek data yang akan
dimasukkan memiliki nilai yang //fungsi yang digunakan untuk mencetak tree
sama dengan data pada root secara inOrder
else if (databaru==(*root)->data) void inOrder(Node *root)
printf("Data Sudah ada!"); {
} if(root!=NULL)
Sambungan …#2
//fungsi utama
if(root!=NULL)
int main()
{
{
inOrder(root->kiri);
//deklarasikan variabel
if(root->data!=NULL)
char pil;
{
printf("%d ",root->data);
while (true)
}
{
inOrder(root->kanan);
system("cls"); //bersihkan layar
}
char data;
}
printf("\t#PROGRAM TREE Dev C++#");
printf("\n\t=================");
//fungsi yang digunakan untuk mencetak tree
printf("\nMENU");
secara postOrder
printf("\n----\n");
void postOrder(Node *root)
printf("[1] Tambah Data\n");
{
printf("[2] Lihat Pre-Order\n");
if(root!=NULL) {
printf("[3] Lihat In-Order\n");
postOrder(root->kiri);
printf("[4] Lihat Post-Order\n");
postOrder(root->kanan);
printf("[X] Keluar\n");
if(root->data!=NULL)
printf("Pilihan Anda : ");
{
scanf("%c",&pil);
printf("%d ",root->data); }
fflush(stdin); //mengosongkan buffering
}
}
Sambungan …#3
switch(pil) //jika pil bernilai '3'
{ case '3':
//jika pil bernilai '1' printf("\nOUTPUT IN ORDER : ");
case '1': printf("\n------------------\n");
printf("\nINPUT : "); if(pohon!=NULL)
printf("\n-------"); //panggil fungsi untuk mencetak
printf("\nMasukkan data: "); data secara inOrder
scanf("%d", &data); inOrder(pohon);
//panggil fungsi untuk menambah node else
yang berisi data pada tree printf("Masih Kosong!!!");
tambah(&pohon,data); _getch();
_getch(); break; break;
//jika pil bernilai '2' //jika pil bernilai '4'
case '2': case '4':
printf("\nOUTPUT PRE ORDER : "); printf("\nOUTPUT POST ORDER: ");
printf("\n------------------\n"); printf("\n------------------\n");
if(pohon!=NULL) if(pohon!=NULL)
//panggil fungsi untuk mencetak data //panggil fungsi untuk mencetak data
secara preOrder secara postOrder
preOrder(pohon); postOrder(pohon);
else else
printf("Masih Kosong!!!"); printf("Masih Kosong!!!");
_getch(); _getch();
break; break;
Sambungan …#4
//jika pil bernilai 'X' atau 'x' Catatan:
case 'X'|'x':
exit(0); • Entri data satu per satu.
break; • Pre Order sesuai
}
}
dengan data yang
} dientri
• In Order Diurutkan
dari kecil ke besar
• Post Order susunan
output seperti distribusi
normal. Data pertama
terletak di akhir.
• Contoh data entry:
60 45 30 70 40 90 25 80