5.4.5 Symmetric Case |

Finally, we need to write code for the case that we chose not to discuss
earlier, where the insertion occurs in the right subtree of *y*. All we
have to do is invert the signs of balance factors and switch
*avl_link*[] indexes between 0 and 1. The results are this:

157. <Rebalance AVL tree after insertion in right subtree 157> =structavl_node*x=y->avl_link[1];if(x->avl_balance== +1) {

<Rotate left atyin AVL tree 158>

}else

{

<Rotate right atxthen left atyin AVL tree 159>

}

This code is included in 151 and 162.

158. <Rotate left atyin AVL tree 158> =w=x;y->avl_link[1] =x->avl_link[0];x->avl_link[0] =y;x->avl_balance=y->avl_balance= 0;

This code is included in 157 and 532.

159. <Rotate right atxthen left atyin AVL tree 159> =assert(x->avl_balance== -1);w=x->avl_link[0];x->avl_link[0] =w->avl_link[1];w->avl_link[1] =x;y->avl_link[1] =w->avl_link[0];w->avl_link[0] =y;if(w->avl_balance== +1)

x->avl_balance= 0,y->avl_balance= -1;elseif(w->avl_balance== 0)

x->avl_balance=y->avl_balance= 0;else/*w->avl_balance== -1 */

x->avl_balance= +1,y->avl_balance= 0;w->avl_balance= 0;