Quick actions

cmd+k|ctrl+k

Navigation

Languages

d

Snippet info

Language

C

Visibility

public

Author

sriram

Created

2023-09-27T03:53:08.937213Z

Updated

2023-09-27T03:53:08.937213Z

Write program on avl tree insertion
#include<stdio.h>
#include<stdlib.h>
struct node
{
    int key;
    struct node *left;
    struct node *right;
    int h;
};
struct node *root=NULL;
int l,r;
int max(int a,int b)
{
	int c;
 c=	a>b? a:b;
 return c;
}

int height(struct node *n)
{
	
	if(n==NULL)
	 return -1;
	 l=height(n->left);
	 r=height(n->right);
	 return 1+max(l,r);
}

struct node*leftrotate(struct node *x)
{
	struct node *y=x->right;
	struct node *t=y->left;
	y->left=x;
	x->right=t;
	x->h=height(x);
	y->h=height(y);
    return y;	
}
struct node*rightrotate(struct node *y)
{
	struct node *x=y->left;
	struct node *t=x->right;
	x->right=y;
	y->left=t;
	x->h=height(x);
	y->h=height(y);
	return x;
}
struct node *insert(struct node *n,int k)
{
	int b;
    if(n==NULL)
    {
        n=(struct node*)malloc(sizeof(struct node));
        n->left=NULL;
        n->right=NULL;
        n->key=k;
        n->h=0;
        
        return n;
        
    }
     if(k < n->key)
    n->left=insert(n->left,k);
    else if(k>n->key)
    n->right=insert(n->right,k);
    
    n->h=height(n);
    b=height(n->left)-height(n->right);
    if(b>1 && k<n->left->key)
    return rightrotate(n);
	if(b>1 && k>n->left->key)
	{
		n->left=leftrotate(n->left);
		return rightrotate(n);

	 } 
	 if(b<-1 && k>n->right->key)
	 return leftrotate(n);
	 if(b<-1 && k<n->right->key)
	 {
	 	n->right=rightrotate(n->right);
	 	return leftrotate(n);
	 }
    
 return n;   
}
void preorder(struct node *t)
{
    if(t!=NULL)
    {
        printf("%d-->%d  ",t->key,t->h);
        preorder(t->left);
        preorder(t->right);
    }
}

int main()
{
    int n,i,k;
    printf("enter n value");
    scanf("%d",&n);
    printf("enter %d values",n);
    for(i=0;i<n;i++)
    {
        
         scanf("%d",&k);
         root=insert(root,k);
    }
    preorder(root);
}
INFO