【问题标题】:How many balance checks are needed in an AVL tree insertion / deletionAVL 树插入/删除需要多少个余额检查
【发布时间】:2013-10-31 19:15:33
【问题描述】:

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

例如,插入一个节点后,我们是否需要从新节点一直到根节点检查余额?或者我们可以在提交轮换后停止吗?

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

【问题讨论】:

    标签: algorithm data-structures avl-tree


    【解决方案1】:

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

    在删除之后,比如插入,你将不得不一直更新平衡因子;所以又是 O(log n) 更新。但是,与插入不同,您可能有多个重组轮换来将树恢复到它的不变量。

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

    【讨论】:

      【解决方案2】:

      我已经搜索得更深入了,我发现你什么时候可以停止检查:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多