旋转后 AVL 树中有多少节点改变了深度
How many nodes in an AVL tree change depth after a rotation
在 AVL 树中添加或删除节点时,可能会发生重新平衡。我可以理解如何需要 O(log(n)) 重新平衡,但是当发生这些旋转以平衡树时,有多少节点实际改变了级别。我似乎无法在任何地方找到这个。我以为是 O(log(n)) 但似乎无法弄清楚为什么。将不胜感激
答案是O(n)。
假设在每个节点都有一个“深度”字段,维护它需要多少钱?
有一个定理:如果节点N的字段F中的信息完全依赖于它的直接子节点,那么在对数时间内更新(插入或删除)时可以保持。
(定理可以用归纳法证明)
“深度”字段不依赖于其子项,而是依赖于其父项。
但是请注意,定理是一种方式,意思是说什么时候可以保持对数时间,但没有说什么时候not.Therefore不能肯定地说“ depth" 字段可以保持在对数时间(例如高度或 BF 字段),甚至可以在插入时看到 O(n) 个节点改变它们的深度:
在第一次旋转中,t2 和 t4 的深度已更改,在第二次中,t1、t2 和 t3 的深度已更改!
在 AVL 树中添加或删除节点时,可能会发生重新平衡。我可以理解如何需要 O(log(n)) 重新平衡,但是当发生这些旋转以平衡树时,有多少节点实际改变了级别。我似乎无法在任何地方找到这个。我以为是 O(log(n)) 但似乎无法弄清楚为什么。将不胜感激
答案是O(n)。 假设在每个节点都有一个“深度”字段,维护它需要多少钱?
有一个定理:如果节点N的字段F中的信息完全依赖于它的直接子节点,那么在对数时间内更新(插入或删除)时可以保持。
(定理可以用归纳法证明)
“深度”字段不依赖于其子项,而是依赖于其父项。
但是请注意,定理是一种方式,意思是说什么时候可以保持对数时间,但没有说什么时候not.Therefore不能肯定地说“ depth" 字段可以保持在对数时间(例如高度或 BF 字段),甚至可以在插入时看到 O(n) 个节点改变它们的深度:
在第一次旋转中,t2 和 t4 的深度已更改,在第二次中,t1、t2 和 t3 的深度已更改!