在AVL树上假定以下符号/操作。空的AVL树表示为E。 非空AVL树T具有三个属性:
•密钥T.key是根节点的密钥。
•左子T.left是T的左子树,它是AVL树(可能是E)。
•右子T.right是T的右子树,它是AVL树(可能是E)。
我正在尝试编写一种算法(伪代码会这样做)Count(T,lo,hi),该算法对根为T的AVL树中的节点进行计数并返回,其中键值在lo≤范围内键≤hi。我希望它具有时间复杂度O(n),其中n是AVL树T中的节点数。我曾经有一个想法是递归,但是这似乎没有所需的复杂性。有什么想法吗?
答案 0 :(得分:0)
您可以添加诸如counter之类的全局变量,使用Pre-order遍历树,这将花费(n + e),并为每个节点添加1。
您也可以添加一个计数器,并且在数据结构中添加新节点时,可以添加1,如果删除节点,则可以减去1