Pohon dan Metode Pencariannya
Assalamu'alaikum Warahamatullahi Wabarakaatuh.
Hallo sahabat TIFLearning, kali ini kita akan sedikit membahas mengenai pohon(tree). Sesuai namanya, pohon ini memiliki akar dan daun. yang mana akar ini berada diatas dan daunnya berada dibawah (satu2 pohon di dunia, hehehe :D). Untuk mempelajari teknik pohon ini, alangkah baiknya teman2 untuk mempelajari dahulu materi tentang link list, karena dasarnya adalah itu. Sekedar inforamasi, teknik pohon ini sangat berguna ketika teman2 menginjakkan kaki di dunia kecerdasan buatan.
Pada kodingan kali ini, kita akan mencoba membuat 3 metode pencarian dengan teknik pohon, yaitu metode infiks, prefiks, dan postfiks. Contoh hasil kodingannya adalah sebagai berikut:
Untuk lebih jelas, silahkan teman2 kopas atau diketik dari awal (kalau lagi semangat) dan pahami kodingannya.
#include"iostream"
using namespace std;
struct Tree{
int data;
Tree *kiri;
Tree *kanan;
};
void Pre (Tree* node){
if(node){
cout<<node->data<<" ";
Pre(node ->kiri);
Pre(node->kanan);
}
}
void In (Tree* node){
if(node){
In(node ->kiri);
cout<<node->data<<" ";
In(node->kanan);
}
}
void Post (Tree* node){
if(node){
Post(node ->kiri);
Post(node->kanan);
cout<<node->data<<" ";
}
}
main(){
Tree* Root = NULL;
Tree* cabangkanan= NULL;
Tree* cabangkiri= NULL;
Tree* Current= NULL;
Tree* A= NULL;
Tree* B= NULL;
Tree* C= NULL;
Tree* D= NULL;
Tree* E= NULL;
Root= new Tree;
cabangkanan= new Tree;
cabangkiri= new Tree;
Current= new Tree;
A=new Tree;
B=new Tree;
C=new Tree;
D=new Tree;
E=new Tree;
Root->data=3;
Root->kiri=cabangkiri;
Root->kanan=cabangkanan;
cabangkanan->data=5;
cabangkanan->kiri=B;
cabangkanan->kanan=C;
cabangkiri->data=-1;
cabangkiri->kiri=NULL;
cabangkiri->kanan=A;
A->data=2;
A->kiri=NULL;
A->kanan=NULL;
B->data=4;
B->kiri=NULL;
B->kanan=NULL;
C->data=7;
C->kiri=NULL;
C->kanan=D;
D->data=9;
D->kiri=NULL;
D->kanan=NULL;
Current=Root;
while(Current != NULL){
Current=Current->kiri;
}
cout<<"Infiks\t: ";
In(Root);
cout<<endl<<"Prefiks\t: ";
Pre(Root);
cout<<endl<<"Postfiks: ";
Post(Root);
}
using namespace std;
struct Tree{
int data;
Tree *kiri;
Tree *kanan;
};
void Pre (Tree* node){
if(node){
cout<<node->data<<" ";
Pre(node ->kiri);
Pre(node->kanan);
}
}
void In (Tree* node){
if(node){
In(node ->kiri);
cout<<node->data<<" ";
In(node->kanan);
}
}
void Post (Tree* node){
if(node){
Post(node ->kiri);
Post(node->kanan);
cout<<node->data<<" ";
}
}
main(){
Tree* Root = NULL;
Tree* cabangkanan= NULL;
Tree* cabangkiri= NULL;
Tree* Current= NULL;
Tree* A= NULL;
Tree* B= NULL;
Tree* C= NULL;
Tree* D= NULL;
Tree* E= NULL;
Root= new Tree;
cabangkanan= new Tree;
cabangkiri= new Tree;
Current= new Tree;
A=new Tree;
B=new Tree;
C=new Tree;
D=new Tree;
E=new Tree;
Root->data=3;
Root->kiri=cabangkiri;
Root->kanan=cabangkanan;
cabangkanan->data=5;
cabangkanan->kiri=B;
cabangkanan->kanan=C;
cabangkiri->data=-1;
cabangkiri->kiri=NULL;
cabangkiri->kanan=A;
A->data=2;
A->kiri=NULL;
A->kanan=NULL;
B->data=4;
B->kiri=NULL;
B->kanan=NULL;
C->data=7;
C->kiri=NULL;
C->kanan=D;
D->data=9;
D->kiri=NULL;
D->kanan=NULL;
Current=Root;
while(Current != NULL){
Current=Current->kiri;
}
cout<<"Infiks\t: ";
In(Root);
cout<<endl<<"Prefiks\t: ";
Pre(Root);
cout<<endl<<"Postfiks: ";
Post(Root);
}
Setelah memahami kodingan diatas, salah satu contoh pengaplikasiannya adalah membuat rumus ABC dengan teknik pohon. Berikut contoh hasilnya :
Untuk lebih jelas, silahkan kopas dan cermati kodingan berikut:
#include"iostream"
#include"cmath"
using namespace std;
struct Tree{
int data;
string oper;
Tree *kiri;
Tree *kanan;
Tree *sekarang;
};
void Cetak (Tree* node){
int a,b,c;
if(node){
Cetak(node->kiri);
a=node->data;
Cetak(node->kanan);
b=node->data;
if(node->oper=="+") c=a+b;
else if(node->oper=="-") c=a-b;
else if(node->oper=="*") c=a*b;
else if(node->oper=="/") c=a/b;
else if(node->oper=="akar") c=sqrt(b);
}
}
main(){
Tree *Kepala=new Tree;
Tree *A=new Tree;
Tree *B=new Tree;
Tree *C=new Tree;
Tree *D=new Tree;
Tree *E=new Tree;
Tree *F=new Tree;
Tree *G=new Tree;
Tree *H=new Tree;
Tree *I=new Tree;
Tree *J=new Tree;
Tree *K=new Tree;
Tree *L=new Tree;
Tree *M=new Tree;
Tree *N=new Tree;
Tree *O=new Tree;
Tree *kanan=new Tree;
Tree *kiri=new Tree;
int x,y,z;
Kepala->oper="/";
Kepala->kiri=A;
Kepala->kanan=M;
A->oper="+";
A->kiri=C;
A->kanan=B;
B->oper="akar";
B->kiri=NULL;
B->kanan=D;
C->data=y;
C->kiri=NULL;
C->kanan=NULL;
D->oper="-";
D->kiri=E;
D->kanan=H;
E->oper="*";
E->kiri=F;
E->kanan=G;
H->oper="*";
H->kiri=I;
H->kanan=J;
F->data=y;
F->kiri=NULL;
F->kanan=NULL;
G->data=y;
G->kiri=NULL;
G->kanan=NULL;
I->data=4;
I->kiri=NULL;
I->kanan=NULL;
J->oper="*";
J->kiri=K;
J->kanan=L;
K->data=x;
K->kiri=NULL;
K->kanan=NULL;
L->data=z;
L->kiri=NULL;
L->kanan=NULL;
M->oper="*";
M->kiri=N;
M->kanan=O;
N->data=2;
N->kiri=NULL;
N->kanan=NULL;
O->data=x;
O->kiri=NULL;
O->kanan=NULL;
Cetak(Kepala);
}
Mungkin sekian dulu materi kali ini. Berhubung saya lagi malas berpikir dan menjelaskan kodingannya :p jadi silahkan teman2 pahami sendiri. Buat yang bingung blok sintaknya, monggo dikomen. Terima kasih dan silahkan lihat2 teknik pemrograman lainnya :)
Tidak ada komentar: