Example #1
0
void Tree<T>::insert(T value)
{
    if (root == NULL)
        root = new Node(value);
    else 
    {
        struct Node *temp = root, *prev = 0;
        while(temp != NULL)
        {
            prev = temp;
            if (value < temp->_value)
                temp = temp->left;
            else if (value > temp->_value)
                temp = temp->right;
            else
            {
                temp->count++;
                return;
            }
        }
        if(value < prev->_value)
        {	prev->left = new Node(value);
            prev->left->parent = prev;
            rebal(prev->left);
        }  else
        {
            prev->right= new Node(value);
            prev->right->parent = prev;
            rebal(prev->right);
        }

    }

}
Example #2
0
tree* delavl(tree *t)
{  
  if(t==NULL)
     {printf("\n Tree is empty\n ");	return t;}
 
  printf("\n Enter the element you wish to delete ");
   int k; scanf(" %d",&k);


  int flag=0;

   tree *root=t;

   while(t)					//element exists
  { 
   if(k==t->data) {flag=1; break; }
   if(k>t->data) t=t->right;
   else		 t=t->left; 
  } 
 
  if(flag!=1)
  { printf("\n Element doesn't exist in the tree \n"); return root; flag=1; }

  else
  {

     if((t->left!=NULL && t->right!=NULL))
     {
	printf("\n Given node has both children \n");

	tree * succ,*sucpar=t;				//to find successors

 	        
	succ=t->right;

        while(succ->left) 
	 {
	  sucpar=succ;
	  succ=succ->left;
	 }	

 	printf(" Successor is %d\n",succ->data);
 	printf(" Parent of successor is %d",sucpar->data);

        t->data=succ->data; 
							
	if(succ->right)	
	{
	  if(sucpar->left) sucpar->right=succ->right;
	  else sucpar->left=succ->right;
	}

	else 
	{
	  if(sucpar->left) {sucpar->left=t->left; sucpar->right=NULL;}
	  else sucpar->left=NULL;
	}

	free(succ);  	


	printf("\n Node Deleted : %d \n",k);
	
	return rebal(root,t);
    }
 

   if(t->left==NULL && t->right==NULL) 			//given node is  leaf node
   { 
      printf("\n Given node is a leaf node \n"); 
      printf(" Node Deleted : %d \n",k);
	
      tree *par=parent(root,k);

	if(t->data==par->data)
	  	{printf("\n Removing the root node \n");free(t); return NULL;}
		
	
         if(par->left->data==t->data)  {par->left=NULL;  free(t);  }
     	 if(par->right->data==t->data) {par->right=NULL; free(t);  }
       
 	return rebal(root,par);
   }
     
     if(t->right==NULL && t->left!=NULL)		//given node has one left child
  {  
      printf("\n Given node has one left child \n");
      printf(" Node Deleted : %d\n ",k);
      
      tree * del=t; 
      tree *par=parent(root,k);
	
	
	if(t==par)
	  {
		t=t->left;
		free(del);
		return t;
	 }

   	  else  if(t->data>par->data)  {par->right=t->left ; free(t);  }
   	  else 		{par->left=t->left; free(t);  }
	
     return rebal(root,par);
   }
 
    if(t->left==NULL && t->right!=NULL)			//given node has one right child
  {  
      printf("\n Given node has one right child \n");
      printf(" Node Deleted : %d \n",k);
	
	tree * del=t;
	tree *par=parent(root,k);

	if(t==par)
	  {
		t=t->right;
		free(del);
		return t;
	 }	

    	  else if(t->data>par->data)  {par->right=t->right ; free(t);  }
   	  else 		{par->left=t->right; free(t);  }

      return rebal(root,par);
   }	
 }
  return root;

  
}