.. _23Tree: .. raw:: html .. |--| unicode:: U+2013 .. en dash .. |---| unicode:: U+2014 .. em dash, trimming surrounding whitespace :trim: .. This file is part of the OpenDSA eTextbook project. See .. http://algoviz.org/OpenDSA for more details. .. Copyright (c) 2012-2013 by the OpenDSA Project Contributors, and .. distributed under an MIT open source license. .. avmetadata:: :author: Cliff Shaffer ========== 2-3+ Trees ========== 2-3+ Trees ---------- 2-3 Tree ~~~~~~~~ * A 2-3 Tree has the following properties: #. A node contains one or two keys #. Every internal node has either two children (if it contains one key) or three children (if it contains two keys). #. All leaves are at the same level in the tree, so the tree is always height balanced. * The 2-3 Tree has a search tree property analogous to the BST. 2-3+ Tree ~~~~~~~~~ * Internal nodes of the 2-3+ Tree do not store records * They only store key values to guide the search. * Leaf nodes store records or pointers to records. * A leaf node may store more or less records than an internal node stores keys. See |TTViz_link| for examples of operations. .. |TTViz_link| raw:: html this link See |BP_link| for an interactive visualization. .. |BP_link| raw:: html this link 2-3+ Tree Insert Rules ~~~~~~~~~~~~~~~~~~~~~~ #. If you have room in the node, add in the record. * You might need to update parent keys, but not parent structure #. If the node overflows, then split 1/2. * Promote the right node's first key value to the parent. * This can cause a cascade of splits. 2-3+ Tree Deletion Rules (1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. If the node has enough records, simply remove this one. * Don't bother to adjust key values of parents 2. If the node underflows, attempt to borrow from a sibling. * Do not borrow from cousins. * Borrowing will require update of keys in parents, but not parent structure. 2-3+ Tree Deletion Rules (2) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3. If borrowing is impossible, then that means something has to change structurally. * If this is a leaf node, then it goes away (no records left). Which means a deletion from the parent. * If this is an internal node that lost a child, then it is down to one child that must be merged with a sibling. * At a minimum, this means adjustment to other key values up the tree. * It could cause a cascade of merges up the tree. In the limit, the root might go away, making the tree become one level shorter. Special Considerations for Project 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * The difference between Key and Value are slightly blurred. * The tree stores KVPairs, each record is a "track". * We represent each track with TWO records: artist|song and song|artist * An artist with multiple songs appears as multiple KVPairs with the same "key" (artist), but different "values" (songs). * When searching, use the "value" to break ties in the "key"