Luí*_*rme 9 algorithm binary-tree data-structures
我们都知道有很多自平衡二分查找树(BST),最着名的是红黑和AVL.看看AA树和替罪羊树也许有用.
我想删除插入和搜索,就像任何其他BST一样.但是,删除给定范围内的所有值或删除整个子树是很常见的.所以:
是否有AVL或RB的变体可以帮助我吗?替罪羊树看起来更像这样,但也需要一些改变,任何有经验的人都可以分享一些东西?
更准确地说,哪种平衡程序和/或删除程序可以帮助我保持这项行动的时间效率?
可以在O(logn +对象num)中删除BST的值范围.
我所知道的最简单的方法是使用确定性跳过列表数据结构(您可能希望在继续之前阅读有关此数据结构的内容).在确定性跳过列表中,所有实际值都存储在底层,并且在它们的上层有指针.插入,搜索和删除都在O(logn)中完成.
范围删除操作可以根据以下算法完成:
范围删除的总复杂度为O(logn +范围内的对象数).请注意,如果您选择使用随机跳过列表,则会获得相同的复杂性,但平均而言,并非最坏情况.优点是你不必修复上层指针来满足2-3的需求.
确定性跳过列表具有1-1到2-3树的映射,因此通过更多工作,上述过程也可以用于2-3树.