GNU libavl 2.0.1
Author: Ben Pfaff

14.5 Deletion |

Deletion from a PAVL tree is a natural outgrowth of algorithms we have already implemented. The basic algorithm is the one originally used for plain AVL trees. The search step is taken verbatim from PBST deletion. The deletion step combines PBST and TAVL tree code. Finally, the rebalancing strategy is the same as used in TAVL deletion.

The function outline is below. As noted above, step 1 is borrowed from PBST deletion. The other steps are implemented in the following sections.

    534. <PAVL item deletion function 534> =
    void *
    pavl_delete (struct pavl_table *tree, const void *item)
    {
      struct pavl_node *p; /* Traverses tree to find node to delete. */
      struct pavl_node *q; /* Parent of p. */
      int dir;             /* Side of q on which p is linked. */

      assert (tree != NULL && item != NULL);

      <Step 1: Find PBST node to delete; pbst => pavl 494>
      <Step 2: Delete item from PAVL tree 535>
      <Steps 3 and 4: Update balance factors and rebalance after PAVL deletion 539>
    }

This code is included in 522.

Subsections:

- 14.5.1 Step 2: Delete
- 14.5.2 Step 3: Update Balance Factors
- 14.5.3 Step 4: Rebalance
- 14.5.4 Symmetric Case

14.4.4 Symmetric Case | 14 AVL Trees with Parent Pointers | 14.5.1 Step 2: Delete