运行时使用AVL树查找中间元素

时间:2017-08-02 21:24:39

标签: algorithm data-structures runtime avl-tree

我有一个幻灯片说明如下: 为了在AVL树中找到中间元素,我按顺序遍历元素,直到它到达moddile元素。需要O(N)。

如果我知道的话,在树结构中,find元素取2 *(logn),因为AVL是二叉树,总是分为2个孩子。

但为什么说O(N)?

2 个答案:

答案 0 :(得分:0)

分成2个孩子并不能保证完美的对称性。例如,考虑所有平衡二叉树中最不平衡的情况:每个右孩子的深度比相应的左孩子多一个。 在这样的树中,中间元素将位于右分支的左侧分支的某处......

您需要确定您拥有的节点数N,然后找到N/2个最大节点。这不是 O(log N)过程。

答案 1 :(得分:0)

我只想详细说明'A.马什雷吉的评论。

因为,正在考虑的树是AVL树 - O(log n)中元素的保证查找保存为您要查找的元素(键)的日志。

问题是 - 您正在尝试识别给定数据结构中的中间元素。因为它是AVL树(自平衡BST)按顺序旅行为您提供按升序排列的元素。您想使用此属性来查找中间元素。

算法就像 - 按顺序遍历的每个节点都有一个计数器增量,并返回@n / 2th位置。这总和为O(n / 2),因此总体复杂度为O(n)。

相关问题