Winter Bootcamp in ML and IoT in Jaipur
 Course content (For Bootcamp & Winter Training):- Machine Learning (ML) || Internet of Things (IoT) || Register for winter bootcamp
0 like 0 dislike
in Challenge Questions by (3.3k points)

1 Answer

0 like 0 dislike
by (150 points)
/*This program is of creation of AVL Tree for char type data which includes following features:-

1.Create

2.In order

3.Pre order

4.Post order

5.Insert

6.Height of tree

7.Search element

8.Delete element

9.Find minimum

10.Find maximum

#this code is written in turboc++

*/

#include<iostream.h>

#include<conio.h>

#include<alloc.h>

#include<process.h>

struct node

{

  int data;

  struct node* right,*left;

}*root=NULL;

int height(struct node *ptr )

{

     int l,r,h;

     if(ptr==NULL)

return -1;

     else

     {

       l=height(ptr->left);

       r=height(ptr->right);

       h= l>r?l+1:r+1;

     }

     return h;

}

int balance(struct node *ptr)

{

  int l,r,b;

  if(ptr==NULL)

    return 0;

  else

  {

    l=height(ptr->left);

    r=height(ptr->right);

    b=l-r;

  }

  return b;

}

struct node* llrotate(struct node *ptr)

{

   struct node *temp;

   temp=ptr->left;

   ptr->left=temp->right;

   temp->right=ptr;

   return temp;

}

struct node* rrrotate(struct node *ptr)

{

   struct node *temp;

   temp=ptr->right;

   ptr->right=temp->left;

   temp->left=ptr;

   return temp;

}

struct node* lrrotate(struct node *ptr)

{

  struct node *temp;

  temp=ptr->left->right;

  ptr->left->right=temp->left;

  temp->left=ptr->left;

  ptr->left=temp->right;

  temp->right=ptr;

  return temp;

}

struct node* rlrotate(struct node *ptr)

{

  struct node *temp;

  temp=ptr->right->left;

  ptr->right->left=temp->right;

  temp->right=ptr->right;

  ptr->right=temp->left;

  temp->left=ptr;

  return temp;

}

struct node* create(struct node *ptr,int a)

{

    if(ptr==NULL)

    {

struct node *nn;

nn=(struct node*)malloc(sizeof(struct node));

nn->data=a;

nn->right=NULL;

nn->left=NULL;

ptr=nn;

    }

    else

    {

      if((ptr->data)>a)

      {

ptr->left=create(ptr->left,a);

if(balance(ptr)==2)

{

   if(a<ptr->left->data)

   {

     ptr=llrotate(ptr);

   }

   else

   {

     ptr=lrrotate(ptr);

   }

}

      }

      else if(ptr->data==a)

cout<<"element already exist!\n";

      else

      {

ptr->right=create(ptr->right,a);

if(balance(ptr)==-2)

{

   if(a>ptr->right->data)

   {

     ptr=rrrotate(ptr);

   }

   else

   {

     ptr=rlrotate(ptr);

   }

}

      }

    }

    return ptr;

}

struct node* findmin(struct node *ptr)

{

  if(ptr->left)

    return findmin(ptr->left);

  else

    return ptr;

}

struct node* findmax(struct node *ptr)

{

  if(ptr->right)

    return findmax(ptr->right);

  else

    return ptr;

}

struct node* del(struct node *ptr,int a)

{

    if(ptr==NULL)

    {

cout<<"Element not present!!"<<endl;

    }

    else

    {

      if((ptr->data)>a)

      {

ptr->left=del(ptr->left,a);

if(balance(ptr)==-2)

{

   if(ptr->right->right)

   {

     ptr=rrrotate(ptr);

   }

   else

   {

     ptr=rlrotate(ptr);

   }

}

      }

      else if(ptr->data==a)

      {

struct node *temp;

if(ptr->left&&ptr->right)

{

   temp=findmin(ptr->right);

   ptr->data=temp->data;

   ptr->right=del(ptr->right,ptr->data);

}

else

{

   if(ptr->left)

   {

     temp=findmax(ptr->left);

     ptr->data=temp->data;

     ptr->left=del(ptr->left,ptr->data);

   }

   else if(ptr->right)

   {

     temp=findmin(ptr->right);

     ptr->data=temp->data;

     ptr->right=del(ptr->right,ptr->data);

   }

   else

   {

     temp=ptr;

     ptr=NULL;

     free(temp);

   }

}

      }

      else

      {

ptr->right=del(ptr->right,a);

if(balance(ptr)==2)

{

   if(ptr->left->left)

   {

     ptr=llrotate(ptr);

   }

   else

   {

     ptr=lrrotate(ptr);

   }

}

      }

    }

    return ptr;

}

void indisplay(struct node *ptr)

{

   if(ptr==NULL)

      return;

   indisplay(ptr->left);

   cout<<(char)(ptr->data)<<" ";

   indisplay(ptr->right);

}

void predisplay(struct node *ptr)

{

   if(ptr==NULL)

      return;

   cout<<(char)(ptr->data)<<" ";

   predisplay(ptr->left);

   predisplay(ptr->right);

}

void postdisplay(struct node *ptr)

{

   if(ptr==NULL)

      return;

   postdisplay(ptr->left);

   postdisplay(ptr->right);

   cout<<(char)(ptr->data)<<" ";

}

struct node* search(struct node *ptr,int a)

{

    if(ptr==NULL)

      return ptr;

    else if(ptr->data>a)

      return search(ptr->left,a);

    else if(ptr->data<a)

      return search(ptr->right,a);

    return ptr;

}

void main()

{

   int choice;

   char ch='j';

   char a;

   clrscr();

   cout<<"1.Create\t2.In order\t3.Pre order\t4.Post order\t5.Insert\t6.Height of tree\t7.Search element\t8.Delete element\t9.Find minimum\t10.Find maximum\t11.Exit"<<endl;

   do{

   cout<<"Choose a operation which you want to perform:";

   cin>>choice;

   switch(choice)

   {

case 1:

   cout<<"Enter elements(enter ; after last element):";

   while(a!=';')

   {

    cin>>a;

    if(a!=';')

    root=create(root,(int)(a));

   }

   break;

case 2:

   indisplay(root);

   cout<<"\n";

   break;

case 3:

   predisplay(root);

   cout<<"\n";

   break;

case 4:

   postdisplay(root);

   cout<<"\n";

   break;

case 5:

   cout<<"Enter element which you want to insert:";

   cin>>a;

   root=create(root,(int)(a));

   break;

case 6:cout<<"Height of tree = "<<height(root)<<endl;

      break;

case 7:cout<<"Enter element:";

     cin>>a;

     if(search(root,int(a)))

cout<<"Element found"<<endl;

     else

cout<<"Element not found!!"<<endl;

     break;

case 8:

     cout<<"Enter element which you want to delete:";

     cin>>a;

     root=del(root,(int)(a));

     cout<<"Deletion successful!!\n";

     break;

case 9:

     cout<<"minimum = "<<(char)(findmin(root)->data)<<"\n";

     break;

case 10:

     cout<<"maximum = "<<(char)(findmax(root)->data)<<"\n";

     break;

case 11:exit(0);

       break;

default:cout<<"Wrong entry\n";

   }

   }while(ch=='j');

}

//ans:- In order : C G I M N O P T U

Winter 10 Days boot-camp classes(7 HRS Daily) will start from 5, 20 & 27 December 2019 in:
1) Internet of things(IoT) Using RASPBERRY-PI
2) Machine Learning (ML)

70% OFF| Fee-INR 3,000/-

Limited seats!! Hurry up!!

[[ CALL - 07976731765 ]]

Some Study Resources are compiled from original Stack Overflow Documentation, the content is developed by the different experts at Stack Overflow. Study resources are released under Creative Commons BY-SA. Images may be copyright of their respective owners. This website is for self-learning and not affiliated with Stack Overflow. All trademarks and registered trademarks are the property of their respective company owners. Please send feedback and corrections to chandwaglobal@gmail.com.

...