10.5.3 Aside: Comparison of Deletion Algorithms

This book has presented algorithms for deletion from BSTs, TBSTs, and RTBSTs. In fact, we implemented two algorithms for RTBSTs. Each of these four algorithms has slightly different performance characteristics. The following table summarizes the behavior of all of the cases in these algorithms. Each cell describes the actions that take place: “link” is the number of link fields set, “tag” the number of tag fields set, and “succ/pred” the number of general successor or predecessors found during the case.

 BST* TBST Right-Looking TBST Left-Looking TBST Case 1 1 link 2 links 1 succ/pred 2 links 1 succ/pred 1 link Case 2 1 link 1 link 1 tag 1 link 1 tag 1 link 1 tag Case 3 2 links 3 links 1 tag 1 succ/pred 3 links   1 succ/pred 2 links 1 tag Case 4 subcase 1 4 links   1 succ/pred 5 links 2 tags 2 succ/pred 5 links 1 tag 2 succ/pred 4 links 1 tag 1 succ/pred Case 4 subcase 2 4 links   1 succ/pred 5 links 2 tags 2 succ/pred 5 links 1 tag 2 succ/pred 4 links 1 tag 1 succ/pred

* Listed cases 1 and 2 both correspond to BST deletion case 1, and listed cases 3 and 4 to BST deletion cases 2 and 3, respectively. BST deletion does not have any subcases in its case 3 (listed case 4), so it also saves a test to distinguish subcases.

As you can see, the penalty for left-looking deletion from a RTBST, compared to a plain BST, is at most one tag assignment in any given case, except for the need to distinguish subcases of case 4. In this sense at least, left-looking deletion from an RTBST is considerably faster than deletion from a TBST or right-looking deletion from a RTBST. This means that it can indeed be worthwhile to implement right-threaded trees instead of BSTs or TBSTs.