我想扩充二进制搜索树,以便在O(h)时间内仍然支持搜索,插入和删除,然后我想实现一个算法来查找给定范围内所有节点值的总和。
答案 0 :(得分:2)
如果您向BST课程添加其他数据结构,特别是Hashmap
或Hashtable
。您的keys
将是您的BST包含的不同数字,以及values
每个数字的出现次数。 BST search(...)
不会受到影响,但insert(...)
和delete(...)
需要轻微更改代码。
插入
将节点添加到BST时,检查Hashmap中是否存在该值作为键。如果确实存在增量发生次数1.如果不存在,则将其添加到初始值为1的Hashmap。
删除
当删除时减少Hashmap中的出现次数(假设你没有被告知要删除一个不存在的节点)
萨姆
现在为sum函数
sum(int start, int end)
您可以迭代检查您的Hashmap,以查看地图中存在的范围中的哪些数字及其出现次数。使用此方法,您可以通过将Map中的所有值(在该范围内)乘以其出现次数来计算总和。
复杂性
空间:O(n)
求和时间方法:O(范围大小)。
所有其他方法时间复杂度都没有受到影响。
你没有提到太空克制,所以希望这没关系。我很感兴趣,看看你是否可以使用BST的属性来更有效地解决这个问题。