Page 159 - DCAP605_ADVANCED_DATA_STRUCTURE_AND_ALGORITHMS
P. 159

Advanced Data Structure and Algorithms




                    Notes               * Update heights, then set new root.

                                        */
                                       void rotateWithRightChild( AvlNode * & k1 )
                                       {
                                           AvlNode *k2 = k1->right;
                                           k1->right = k2->left;
                                           k2->left = k1;
                                           k1->height = max( height( k1->left ), height( k1->right ) ) + 1;
                                           k2->height = max( height( k2->right ), k1->height ) + 1;
                                           k1 = k2;
                                       }


                                       /**
                                        * Double rotate binary tree node: first left child.
                                        * with its right child; then node k3 with new left child.
                                        * For AVL trees, this is a double rotation for case 2.
                                        * Update heights, then set new root.
                                        */
                                       void doubleWithLeftChild( AvlNode * & k3 )
                                       {
                                           rotateWithRightChild( k3->left );
                                           rotateWithLeftChild( k3 );
                                       }


                                       /**
                                        * Double rotate binary tree node: first right child.
                                        * with its left child; then node k1 with new right child.
                                        * For AVL trees, this is a double rotation for case 3.
                                        * Update heights, then set new root.
                                        */
                                       void doubleWithRightChild( AvlNode * & k1 )
                                       {
                                           rotateWithLeftChild( k1->right );
                                           rotateWithRightChild( k1 );
                                       }
                                   };


                                   #endif








          154                              LOVELY PROFESSIONAL UNIVERSITY
   154   155   156   157   158   159   160   161   162   163   164