有没有办法在O(log n)时间内更新平衡二进制搜索树的节点?
假设存在一个平衡树,每个节点都有一个与之关联的索引对象。因此,节点1将指向对象1,节点2将指向对象2,依此类推。
如果树中有100个节点,并且有人决定删除第二个节点,那么我们必须更新剩余的节点,使得节点3现在将指向节点2,节点4现在将指向节点3并且等等。
但是这种方法需要花费O(n)时间。
如何在O(log n)时间内完成?
答案 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)
。