例如,我知道只需通过使用大小值扩充每个节点,我就可以轻松地对每个节点进行排名或获得第k个顺序统计信息。您在C ++ STL集等语言实现方面还有哪些其他好处?
编码自己的BST有很多好处。
正如您在答案中提到的,您可以扩充BST以在旋转时保留的每个节点中存储额外信息。这可用于构建间隔树,链接/切割树等,否则无法使用黑盒标准容器。
此外,编写自己的树可以让您更改平衡的方式。例如,如果您知道相对于查找几乎没有插入和删除,则可以使用AVL树而不是红色/黑色树,因为这些树的高度较小。如果你知道一个事实,你将有一个非统一的访问模式,只有一个线程,你可以使用一个splay树。或者,如果您知道整个运行时非常重要并希望进行多线程查找,那么您可以尝试编写替罪羊树。
希望这可以帮助!
如果您实现自己的数据结构,则必须对其进行编码,测试它是否正确,并确保您的实现是有效的。 这已经在STL组件中得到了解决,因此您希望重用现有的实现,而不是自己重新发明轮子。
这取决于你的用途。就像你不想在预定义的stl容器中进行自定义更改一样,stl容器是最好的,因为构建已构建的代码浪费时间。 但是如果你想实现二进制树,它通过检查字符插入位置(左或右)来获取输入,那么那时你就构建了自己的BST代码。