AVL树删除规则

时间:2017-11-06 11:53:39

标签: data-structures tree binary-search-tree avl-tree

对于AVL树,当从树中删除需要重组的节点时,我正在阅读的书中指出,有一些规则要遵循以选择要重组的节点。一个例子就是这样:

       44
     /   \
    17   62
        /  \
       50  78
      /  \   \
     48  54  88

这是删除节点(节点17的子节点)并且违反了height-balance属性之后的AVL树。

我读过的书指出,它将让z成为从节点17上升的第一个不平衡位置,y是具有更高高度的z的子节点,最后x是具有更高高度的y的子节点。但是,如果y的子节点具有相同的高度,则x将与y相同。在这种情况下,x是78,y是62,z是44.

现在提出问题了。为什么我们选择x使它与y同侧?如果我选择x与y不同,那么AVL树会出现任何问题吗?我试图给自己举例,并尝试选择两种类型的x,并重构AVL树。但是,我似乎无法找到将x选为任何一个孩子所引起的任何问题。感谢任何帮助,以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

有趣的是,该主题在各种Web论坛中都有很多不同的答案。我尝试创建所有可能的AVL树节点删除方案,并且观察到,如果从AVL树的左侧删除该节点以使树不平衡,请根据节点可用性执行LL或LR(任何可能的旋转),并且树会均衡。 反之亦然,删除右节点。

此外,还需要确定由于旋转而移动的节点是否具有子节点,如果分别在旋转之前位于左侧或右侧,则分别在左侧或右侧插入子节点。