计算AVL树中节点数的算法

时间:2019-05-23 01:29:05

标签: algorithm tree pseudocode avl-tree

  

在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中的节点数。我曾经有一个想法是递归,但是这似乎没有所需的复杂性。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以添加诸如counter之类的全局变量,使用Pre-order遍历树,这将花费(n + e),并为每个节点添加1。

您也可以添加一个计数器,并且在数据结构中添加新节点时,可以添加1,如果删除节点,则可以减去1