AVL树插入/删除需要多少次余额检查

时间:2013-10-31 19:15:33

标签: algorithm data-structures avl-tree

我一直在阅读关于AVL树的文献,并且发现在AVL树插入/删除中需要多少次平衡检查时没有详细说明。

例如,在插入节点之后,我们是否需要检查从新节点到根节点的平衡?或者我们可以在提交轮换后停止吗?

在删除左侧子树中复制最右边节点的策略时怎么样?从新删除的(左侧子树中最右边的节点)节点到根节点进行检查?我们可以在提交轮换后停止吗?

2 个答案:

答案 0 :(得分:1)

插入后,您需要在树的所有方向上更新每个“父”的平衡因子,直到根;所以它是O(log n)更新的最大值。但是你只需要进行一次重组就可以将树恢复到它的不变量。

删除后,如插入,您必须在树上一直更新平衡因子;所以再次是O(log n)更新。但是,与插入不同,您可以 进行多次重组旋转,以将树恢复为不变量。

http://en.wikipedia.org/wiki/AVL_tree

答案 1 :(得分:-1)

我一直在深入搜索,我发现你什么时候可以停止检查:

  • 当插入的节点的上节点的平衡因子为0时。
  • 轮换后。这是先前肯定的结果。

http://www.superstarcoders.com/blogs/posts/efficient-avl-tree-in-c-sharp.aspx

http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx