Sie sind auf Seite 1von 14

Binary Search tree

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

class binarynode
{
public:
int data;
binarynode *left;
binarynode *right;
};

class binsrctree
{
private:
binarynode *root;
void inorder_rec(binarynode *);
void inorder_non_rec(binarynode *);
void preorder_rec(binarynode *);
void preorder_non_rec(binarynode *);
void postorder_rec(binarynode *);
void postorder_non_rec(binarynode *);
public:
binsrctree()
{
root=NULL;
}
void insert(int );
void print_inorder_rec();
void print_inorder_non_rec();
void print_preorder_rec();

void print_preorder_non_rec();
void print_postorder_rec();
void print_postorder_non_rec();
};

class stack
{
int top;
binarynode *stackel[20];
public:
stack()
{
top=-1;
}
void push(binarynode *);
binarynode* pop();
int empty()
{
if(top==-1)
return(1);

return(0);
}
};

void stack::push(binarynode *node)


{
stackel[++top]=node;
}

binarynode *stack::pop()
{

return(stackel[top]);
}

class stack_int
{
int top;
int stack_int[20];
public:
stack_int()
{
top=-1;
}
void push(int flag);
int pop();
int empty_int()
{
if(top==-1)
return(1);

return(0);
}
};

void stack_int::push(int flag)


{
stack_int[++top]=flag;
}

int stack_int::pop()
{
return(stack_int[top]);
}

/**/
/* fUNCTION TO INSERT A NODE IN THE TREE */
/**/
void binsrctree::insert(int val)
{
binarynode *temp,*prev,*curr;
temp=new binarynode;
temp->data=val;
temp->left=temp->right=NULL;

if(root==NULL)
{
root=temp;
}
else
{
curr=root;
while(curr!=NULL)
{
prev=curr;
if(temp->data<curr->data)
curr=curr->left;
else
curr=curr->right;
}
if(temp->data<prev->data)
prev->left=temp;
else
prev->right=temp;
}
}

/* */
/*INORDER RECURSIVE TRAVERSAL*/
/*-*/

void binsrctree::inorder_rec(binarynode *root)


{
if(root!=NULL)
{
inorder_rec(root->left);
cout<<root->data<<

inorder_rec(root->right);
}
}

/**/
/*INORDER NON RECURSIVE TRAVERSAL*/
/**/

void binsrctree::inorder_non_rec(binarynode *root)


{
stack stk;
binarynode *temp;
if(root!=NULL)
{
temp=root;
do
{
while(temp!=NULL)
{
stk.push(temp);
temp=temp->left;
}/*end while*/

if(!stk.empty())
{
temp=stk.pop();
cout<<temp->data<<

temp=temp->right;
}/*end if*/
else
break;
}while(1); /*end do while*/
}/* end if */
else
cout<<
Empty tree;

} /*end function */

/**/
/*PREORDER RECURSIVE TRAVERSAL */
/**/
void binsrctree::preorder_rec(binarynode *root)
{
if(root!=NULL)
{
cout<<root->data<<

preorder_rec(root->left);
preorder_rec(root->right);
}
}

/**/
/*PREORDER NON RECURSIVE TRAVERSAL */
/**/

void binsrctree::preorder_non_rec(binarynode *root)


{
stack stk;
binarynode *temp=root;

stk.push(temp);

while(!stk.empty())
{
temp=stk.pop();
if(temp!=NULL)
{
cout<<temp->data<<

stk.push(temp->right);
stk.push(temp->left);
}
}

/**/
/*POSTRDER RECURSIVE TRAVERSAL */
/**/

void binsrctree::postorder_rec(binarynode *root)


{
if(root!=NULL)
{
postorder_rec(root->left);
postorder_rec(root->right);
cout<<root->data<<

}
}

/**/
/*POSTORDER NON RECURSIVE TRAVERSAL */
/**/

void binsrctree::postorder_non_rec(binarynode *root)


{
stack stk;
stack_int stk1;
int flag;
binarynode *temp=root;

do
{
if(temp!=NULL)
{
stk.push(temp);
stk1.push(1);
temp=temp->left;
}
else
{
if(stk.empty())
break;
temp=stk.pop();
flag=stk1.pop();
if(flag==2)
{
cout<<temp->data;
temp=NULL;

} /*end if */
else
{
stk.push(temp);
stk1.push(2);
temp=temp->right;
} /* end else */
} /* end if */
}while(1);/*end do while*/
}/*end function*/

/**/
/*FUNCTION TO PRINT INORDER RECURSIVE TRAVERSAL */
/**/

void binsrctree::print_inorder_rec()
{
cout<<
;
inorder_rec(root);
cout<<
;
}

/**/
/*FUNCTION TO PRINT INORDER NON RECURSIVE TRAVERSAL */
/**/

void binsrctree::print_inorder_non_rec()
{
cout<<
;

inorder_non_rec(root);
cout<<
;
}

/**/
/*FUNCTION TO PRINT PREORDER RECURSIVE TRAVERSAL */
/**/

void binsrctree::print_preorder_rec()
{
cout<<
;
preorder_rec(root);
cout<<
;
}

/**/
/*FUNCTION TO PRINT PREORDER NON RECURSIVE TRAVERSAL */
/**/

void binsrctree::print_preorder_non_rec()
{
cout<<
;
preorder_non_rec(root);
cout<<
;
}

/**/

/*FUNCTION TO PRINT POSTORDER RECURSIVE TRAVERSAL */


/**/

void binsrctree::print_postorder_rec()
{
cout<<
;
postorder_rec(root);
cout<<
;
}

/**/
/*FUNCTION TO PRINT POSTORDER NON RECURSIVE TRAVERSAL */
/**/

void binsrctree::print_postorder_non_rec()
{
cout<<
;
postorder_non_rec(root);
cout<<
;
}

/**/
/* MAIN FUNCTION */
/**/

void main()
{
binsrctree BST;

int ch,element;
clrscr();

do
{
cout<<
1.Insert a node in binary tree;
cout<<
2.Recursive Inorder traversal;
cout<<
3.Non Recursive Inorder traversal;
cout<<
4.Recursive preorder traversal;
cout<<
5.Non recursive preorder traversal;
cout<<
6.Recursive postorder traversal;
cout<<
7.Non recursive postorder traversal;
cout<<
8.Exit;
cout<<
Enter your choice;
cin>>ch;

switch(ch)
{
case 1:
cout<<
Enter the element you wnat to insert;
cin>>element;
BST.insert(element);

break;
case 2:
cout<<
Recursive Inorder traversal
;
BST.print_inorder_rec();
break;
case 3:
cout<<
NonRecursive Inorder traversal
;
BST.print_inorder_non_rec();
break;
case 4:
cout<<
Recursive preorder traversal
;
BST.print_preorder_rec();
break;
case 5:
cout<<
Non recursive preorder traversal
;
BST.print_preorder_non_rec();
break;
case 6:
cout<<
Recursive postorder traversal;
BST.print_postorder_rec();
break;
case 7:
cout<<

Non recursive postorder traversal


;
BST.print_postorder_non_rec();
break;
case 8:
exit(1);

}
}while(ch<8);
}

Das könnte Ihnen auch gefallen