通过扩充BST,找到二进制搜索树中节点的总和,其值在一定范围内

时间:2015-10-30 01:25:46

标签: algorithm binary-search-tree

我想扩充二进制搜索树,以便在O(h)时间内仍然支持搜索,插入和删除,然后我想实现一个算法来查找给定范围内所有节点值的总和。

1 个答案:

答案 0 :(得分:2)

如果您向BST课程添加其他数据结构,特别是HashmapHashtable。您的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的属性来更有效地解决这个问题。