在O(log n)时间内更新

时间:2012-09-10 18:33:04

标签: algorithm binary-search-tree

有没有办法在O(log n)时间内更新平衡二进制搜索树的节点?

假设存在一个平衡树,每个节点都有一个与之关联的索引对象。因此,节点1将指向对象1,节点2将指向对象2,依此类推。

如果树中有100个节点,并且有人决定删除第二个节点,那么我们必须更新剩余的节点,使得节点3现在将指向节点2,节点4现在将指向节点3并且等等。

但是这种方法需要花费O(n)时间。

如何在O(log n)时间内完成?

2 个答案:

答案 0 :(得分:1)

如果实现了树,每个节点都有对其子节点的引用,即:

class Node<T>
  Node leftChild
  Node rightChild
  T Data

(与数组或其他方式相反)您只需更新这些引用(例如Wikipedia中针对红黑树所述)。

此过程将花费O(log n)时间,而不是O(n)时间。

如果从树中删除元素2,节点2将同时删除它。

答案 1 :(得分:0)

该属性听起来更像是树的链表。但是二叉搜索树中的删除是O(h),即树的高度。由于它是平衡的,因此O(log n)