与STL实现相比,自平衡BST的自定义实现可以做些什么?

问题描述 投票:1回答:3

例如,我知道只需通过使用大小值扩充每个节点,我就可以轻松地对每个节点进行排名或获得第k个顺序统计信息。您在C ++ STL集等语言实现方面还有哪些其他好处?

algorithm data-structures binary-search-tree
3个回答
1
投票

编码自己的BST有很多好处。

正如您在答案中提到的,您可以扩充BST以在旋转时保留的每个节点中存储额外信息。这可用于构建间隔树,链接/切割树等,否则无法使用黑盒标准容器。

此外,编写自己的树可以让您更改平衡的方式。例如,如果您知道相对于查找几乎没有插入和删除,则可以使用AVL树而不是红色/黑色树,因为这些树的高度较小。如果你知道一个事实,你将有一个非统一的访问模式,只有一个线程,你可以使用一个splay树。或者,如果您知道整个运行时非常重要并希望进行多线程查找,那么您可以尝试编写替罪羊树。

希望这可以帮助!


0
投票

如果您实现自己的数据结构,则必须对其进行编码,测试它是否正确,并确保您的实现是有效的。 这已经在STL组件中得到了解决,因此您希望重用现有的实现,而不是自己重新发明轮子。


0
投票

这取决于你的用途。就像你不想在预定义的stl容器中进行自定义更改一样,stl容器是最好的,因为构建已构建的代码浪费时间。 但是如果你想实现二进制树,它通过检查字符插入位置(左或右)来获取输入,那么那时你就构建了自己的BST代码。

© www.soinside.com 2019 - 2024. All rights reserved.