【发布时间】:2016-03-22 20:46:13
【问题描述】:
如果在深度 d 处将新节点插入到 AVL 树中,恢复高度平衡属性可能需要的最大旋转次数是多少?
我猜想最大值可能是 log2(d),但这是不正确的。
【问题讨论】:
标签: rotation computer-science avl-tree
如果在深度 d 处将新节点插入到 AVL 树中,恢复高度平衡属性可能需要的最大旋转次数是多少?
我猜想最大值可能是 log2(d),但这是不正确的。
【问题讨论】:
标签: rotation computer-science avl-tree
插入时,最多只需要旋转 1 次。你可以阅读它 https://en.wikipedia.org/wiki/AVL_tree
删除时,树的每一层都可能需要轮换,所以删除是 O(log2(d))
【讨论】:
The time required is O(log n) for lookup, plus a maximum of O(log n) retracing levels (O(1) on average) on the way back to the root, so the operation can be completed in O(log n) time
如果你采用朴素的方法,你可以规范化和四舍五入基本的 AVL 余额
{left,even,right} ~ {down,even,up} ~ {green,green,red}
并在插入之前将路线全部清除为绿色。
每个红灯最多需要 2 次旋转,其中不包括子树成本。问题是在旋转的 4 个四叉树中,有 1 个子树高度保持不变。
如果下一个灯是绿灯,则每个红灯只需要旋转 2 次(不包括子树旋转成本。)
为了从树顶向下移动一个新的绿灯,您必须从树顶一个接一个地旋转红灯。
【讨论】: