Algorithm 在O(日志n)时间内更新

Algorithm 在O(日志n)时间内更新,algorithm,binary-search-tree,Algorithm,Binary Search Tree,有没有办法在O(logn)时间内更新平衡二叉搜索树的节点 假设有一个平衡树,这样每个节点都有一个与之关联的索引对象。所以节点1将指向对象1,节点2将指向对象2,依此类推 如果树中有100个节点,并且如果有人决定删除第2个节点,那么我们必须更新其余节点,这样节点3现在将指向节点2,节点4现在将指向节点3,依此类推 但是这种方法需要O(n)时间 如何在O(logn)时间内完成此操作?如果树的实现使得每个节点都引用其子节点,即: class Node<T> Node leftChild

有没有办法在O(logn)时间内更新平衡二叉搜索树的节点

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

如果树中有100个节点,并且如果有人决定删除第2个节点,那么我们必须更新其余节点,这样节点3现在将指向节点2,节点4现在将指向节点3,依此类推

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


如何在O(logn)时间内完成此操作?

如果树的实现使得每个节点都引用其子节点,即:

class Node<T>
  Node leftChild
  Node rightChild
  T Data
类节点
节点左子节点
节点右子节点
T数据
(与数组或其他方式相反)您所要做的就是更新这些引用(例如,如上针对红黑树所述)

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


如果从树中删除元素2,节点2也会随之删除。

该属性听起来更像是树中的链表。但是二叉搜索树中的删除是
O(h)
,即树的高度。因为它是平衡的,所以这是
O(logn)

我在红黑树中查找更新。但是它只处理需要O(logn)时间的删除,但是节点的更新仍然需要O(n)时间。我猜你的意思是删除之后,节点3指向对象2,节点4指向对象3?这样做的目的是什么?