/*Faz a insercao a esquerda na AVL*/ AVL insertLeft(AVL p, void* info, int *cresceu,int tipo_AVL) { p->left=insert(p->left, info, cresceu,tipo_AVL); if(*cresceu) { switch(p->bf) { case RH: p->bf=EH; *cresceu=0; break; case EH: p->bf=LH; *cresceu=1; break; case LH: p=balanceLeft(p); *cresceu=0; } } return p; }
Tree insertLeft(Tree t, TreeEntry e, int *cresceu) { t -> left = insertTree(t -> left, e, cresceu); if(*cresceu) { switch(t -> bf) { case RH: t -> bf = EH; *cresceu = 0; break; case EH: t -> bf = LH; *cresceu = 1; break; case LH: t = balanceLeft(t); *cresceu = 0; } } return t; }
Tree deleteRight(Tree t, TreeEntry e, int *diminuiu) { t -> right = deleteTree(t->right, e, diminuiu); if(*diminuiu) { switch(t->bf) { case RH: t -> bf = EH; *diminuiu = 1; break; case EH: t -> bf = LH; *diminuiu = 0; break; case LH: printf("[bL]\n"); t = balanceLeft(t); *diminuiu = 1; } } return t; }
avlTreeNode* insertNode(avlTreeNode* root , int key ) { if( !root ) { printf("\nIn leaf Insertion\n"); root = creatNode( key ); return root; } if( root -> data == key ) { printf("\nDuplicate Key Not permitted\n"); return root; } else if( root -> data > key ) { printf("\nBefore Left Insertion\n"); root -> leftTree = insertNode( root -> leftTree , key ) ; printf("\nAfter Left Insertion\n"); int balanceDifference; balanceDifference = calculateMaxHight( root ); switch (balanceDifference) { case -15: { printf("\nDon have left and right child\n"); root -> leftTree -> height = 1; root -> leftTree -> balanceFactor = EQ; break; } case 0: { printf("\nBoth equal hight subtrees\n"); root -> height = 1 + ( root-> leftTree -> height ) ; root -> balanceFactor = EQ ; break; } case 1: { /* printf("\nright subtree highted\n");*/ root -> height = 1 + (root -> leftTree -> height) ; root -> balanceFactor = LH ; break; } case 2: { printf("\nLeft subtree highted calling balanceLeft\n"); root = balanceLeft( root ); break; } } return root; } else { printf("\nBefore Rightt Insertion\n"); root -> rightTree = insertNode( root -> rightTree , key ) ; printf("\nAfter Right Insertion\n"); int balanceDifference; balanceDifference = calculateMaxHight( root ); switch (balanceDifference) { case -15: { printf("\nDon have left and right child\n"); root -> rightTree -> height = 1; root -> rightTree -> balanceFactor = EQ; break; } case 0: { printf("\nBoth equal hight subtrees\n"); root -> height = 1 + ( root -> rightTree -> height ) ; root -> balanceFactor = EQ ; break; } case -2: { printf("\nRight highted, calling balanceRight\n"); root = balanceRight( root ); break; } case -1: { /* printf("\nLeft subtree hightedt\n");*/ root -> height = 1 + ( root -> rightTree -> height ); root -> balanceFactor = RH ; break; } } return root; } return root; }