soal responsinya adalah membuat main function dengan pilihan link list atau binary tree...
dari pada banyak bacot... liat ajha ni..
yang binary tree.
#include <cstdlib>
#include <iostream>
using namespace std;
class BinaryTree
{
private:
BinaryTree* left;
BinaryTree* right;
int data;
BinaryTree* root;
public:
BinaryTree()
{
root = NULL;
}
bool isEmpty() const { return root==NULL; }
void inorderr();
void inorder(BinaryTree*);
void preorderr();
void preorder(BinaryTree*);
void postorderr();
void postorder(BinaryTree*);
void insert(int);
void remove(int);
};
void BinaryTree::insert(int d)
{
BinaryTree* t = new BinaryTree;
BinaryTree* parent;
t->data = d;
t->left = NULL;
t->right = NULL;
parent = NULL;
if(isEmpty()) root = t;
else
{
BinaryTree* curr;
curr = root;
while(curr)
{
parent = curr;
if(t->data > curr->data) curr = curr->right;
else curr = curr->left;
}
if(t->data < parent->data)
parent->left = t;
else
parent->right = t;
}
}
void BinaryTree::remove(int d)
{
bool found = false;
if(isEmpty())
{
cout<<"Data kosong ! "<<endl;
return;
}
BinaryTree* curr;
BinaryTree* parent;
curr = root;
while(curr != NULL)
{
if(curr->data == d)
{
found = true;
break;
}
else
{
parent = curr;
if(d>curr->data) curr = curr->right;
else curr = curr->left;
}
}
if(!found)
{
cout<<" Data not found! "<<endl;
return;
}
if((curr->left == NULL && curr->right != NULL)|| (curr->left != NULL&& curr->right == NULL))
{
if(curr->left == NULL && curr->right != NULL)
{
if(parent->left == curr)
{
parent->left = curr->right;
delete curr;
}
else
{
parent->right = curr->right;
delete curr;
}
}
else
{
if(parent->left == curr)
{
parent->left = curr->left;
delete curr;
}
else
{
parent->right = curr->left;
delete curr;
}
}
return;
}
if( curr->left == NULL && curr->right == NULL)
{
if(parent->left == curr) parent->left = NULL;
else parent->right = NULL;
delete curr;
return;
}
if (curr->left != NULL && curr->right != NULL)
{
BinaryTree* chkr;
chkr = curr->right;
if((chkr->left == NULL) && (chkr->right == NULL))
{
curr = chkr;
delete chkr;
curr->right = NULL;
}
else
{
if((curr->right)->left != NULL)
{
BinaryTree* lcurr;
BinaryTree* lcurrp;
lcurrp = curr->right;
lcurr = (curr->right)->left;
while(lcurr->left != NULL)
{
lcurrp = lcurr;
lcurr = lcurr->left;
}
curr->data = lcurr->data;
delete lcurr;
lcurrp->left = NULL;
}
else
{
BinaryTree* tmp;
tmp = curr->right;
curr->data = tmp->data;
curr->right = tmp->right;
delete tmp;
}
}
return;
}
}
void BinaryTree::inorderr()
{
inorder(root);
}
void BinaryTree::inorder(BinaryTree* p)
{
if(p != NULL)
{
if(p->left) inorder(p->left);
cout<<" "<<p->data<<" ";
if(p->right) inorder(p->right);
}
else return;
}
void BinaryTree::preorderr()
{
preorder(root);
}
void BinaryTree::preorder(BinaryTree* p)
{
if(p != NULL)
{
cout<<" "<<p->data<<" ";
if(p->left) preorder(p->left);
if(p->right) preorder(p->right);
}
else return;
}
void BinaryTree::postorderr()
{
postorder(root);
}
void BinaryTree::postorder(BinaryTree* p)
{
if(p != NULL)
{
if(p->left) postorder(p->left);
if(p->right) postorder(p->right);
cout<<" "<<p->data<<" ";
}
else return;
}
int main(int argc, char *argv[])
{
BinaryTree coba ;
coba.insert(5);
coba.insert(9);
coba.insert(12);
coba.insert(45);
coba.insert(34);
coba.insert(89);
coba.insert(1);
coba.insert(90);
coba.insert(7);
coba.insert(48);
coba.insert(92);
coba.preorderr();
cout<<"\n\n";
coba.inorderr();
cout<<"\n\n";
coba.postorderr();
cout<<"\n\n";
coba.remove(34);
coba.remove(90);
coba.remove(92);
coba.remove(5);
coba.preorderr();
cout<<"\n\n";
coba.inorderr();
cout<<"\n\n";
coba.postorderr();
system("PAUSE");
return EXIT_SUCCESS;
}
===================
yang link list
#include <iostream>
using namespace std;
class linklist{
public:
linklist();
void tambah(int);
void tambahdepan(int);
void tambahbelakang(int);
void tampil();
void hapus(int);
void sisip(int,int);
private:
int data;
linklist *berikut,*p;
};
linklist::linklist(){
p=NULL;
}
void linklist::tambah(int info){
linklist *q,*t;
if(p==NULL){
p=new linklist;
p->data=info;
p->berikut=NULL;
}else{
q=p;
while(q->berikut != NULL)
q=q->berikut;
t=new linklist;
t->data=info;
t->berikut=NULL;
q->berikut=t;
}
}
void linklist::tambahdepan(int nilai){
linklist *q;
q = new linklist;
q->data = nilai;
q->berikut = p;
p = q;
}
void linklist::tambahbelakang(int nilai){
linklist *q,*t;
if( p == NULL )
{
p = new linklist;
p->data = nilai;
p->berikut = NULL;
}
else
{
q = p;
while( q->berikut != NULL )
q = q->berikut;
t = new linklist;
t->data = nilai;
t->berikut = NULL;
q->berikut = t;
}
}
void linklist::tampil(){
linklist *i;
for(i=p;i!=NULL;i=i->berikut){
cout<<i->data<<" "<<"-> ";
}cout<<" NULL\n";
}
void linklist::hapus(int target){
linklist *q,*r;
q=p;
if(q->data==target){
p=q->berikut;
delete q;
return;
}
r=q;
while(q!=NULL){
if(q->data==target){
r->berikut=q->berikut;
delete q;
return;
}
r=q;
q=q->berikut;
}
cout<<"\nElemen "<<target<<" tidak ada.\n";
}
void linklist::sisip(int posisi,int nilai){
linklist *q,*t;
int i;
for(i=1,q=p;i<=posisi-1;i++){
q=q->berikut;
if(q==NULL){
cout<<"\nElemen lebih kecil dari "<<posisi<<"\n ";
return;
}
}
t=new linklist;
t->data=nilai;
t->berikut=q->berikut;
q->berikut=t;
}
int main(int argc, char *argv[])
{
linklist reza;
reza.tambah(9);
reza.tambah(7);
reza.tambah(2);
reza.tambah(6);
reza.tambah(13);
reza.tambah(19);
reza.tambah(1);
reza.tambah(17);
reza.tambah(15);
reza.tambah(11);
reza.tambah(5);
reza.tambah(31);
reza.tampil();
//hapus data
cout << " hapus 13"<<endl;
reza.hapus(13);
reza.tampil();
cout << " hapus 11"<<endl;
reza.hapus(11);
reza.tampil();
cout << " hapus 2"<<endl;
reza.hapus(2);
reza.tampil();
cout << " hapus 19"<<endl;
reza.hapus(19);
reza.tampil();
//sisip data
cout << " sisip data 99 pada posisi ke 5"<<endl;
reza.sisip(4,99);
reza.tampil();
cout << " sisip data 35 pada posisi ke 3"<<endl;
reza.sisip(2,35);
reza.tampil();
cout << " sisip data 73 pada posisi ke 7"<<endl;
reza.sisip(6,73);
reza.tampil();
//tambah depan
cout << " tambah data 23 di depan"<<endl;
reza.tambahdepan(23);
reza.tampil();
//tambah belakang
cout << " tambah data 89 di belakang"<<endl;
reza.tambahbelakang(89);
reza.tampil();
system("PAUSE");
return EXIT_SUCCESS;
}
0 Komentar