使用密钥k及时间O(h)计算BST中的条目数

时间:2013-10-13 23:31:06

标签: algorithm data-structures tree big-o binary-search-tree

上周我参加了考试,我遇到了以下问题:

  

描述如何修改二进制搜索树以计算   T中的条目数,其中密钥k为O(h)时间。这个算法应该返回一个   整数,而不是列表。

然后在考试之后答案出版了,如下:

解决方案:通过向每个节点添加内部节点数来修改树 以该节点为根的子树。在插入,删除节点时重新计算这些 并可能进行重组。这需要以下算法:

enter image description here

但这似乎很令人困惑。我的问题是我用红色围绕它们的那些部分的作用是什么?

1 个答案:

答案 0 :(得分:2)

假设您找到了值为node的节点k,这就是您要搜索的内容。现在,假设node.left.value = k。您对子树node.left.right中的所有内容了解多少?每个值必须小于或等于k(因为它位于node的左侧),但也大于或等于k(因为它位于{{1}的右侧}})。因此,该子树中的所有值都等于node.left。作为优化,该算法避免在该情况下递归地下降到该子树,而是仅自动将该子树中的所有内容添加到总数中。这是获得O(h)运行时所必需的;如果您探索了这些树中的所有节点,如果树中的所有n个值都等于k,则运行时可能为Ω(n)。

k

的情况下,类似的逻辑适用于node.right.left

希望这有帮助!