Algorithm 如何生成尽可能不平衡的AVL树?

Algorithm 如何生成尽可能不平衡的AVL树?,algorithm,data-structures,avl-tree,Algorithm,Data Structures,Avl Tree,我在一些论文中看到了这一点,有人认为,当我们删除AVL树的一个节点时,最多可以有log(n)次旋转。我相信我们可以通过尽可能不平衡地生成AVL树来实现这一点。问题是如何做到这一点。这将对我研究移除旋转有很大帮助。非常感谢 如果你想制作一个最大不平衡的AVL树,你需要寻找一个,归纳定义如下: 阶数为0的斐波那契树为空 阶数为1的斐波那契树是单个节点 n+2阶斐波那契树是一个节点,其左子节点是n阶斐波那契树,右子节点是n+1阶斐波那契树 例如,下面是一个5阶斐波那契树: 斐波那契树表示AVL树

我在一些论文中看到了这一点,有人认为,当我们删除AVL树的一个节点时,最多可以有log(n)次旋转。我相信我们可以通过尽可能不平衡地生成AVL树来实现这一点。问题是如何做到这一点。这将对我研究移除旋转有很大帮助。非常感谢

如果你想制作一个最大不平衡的AVL树,你需要寻找一个,归纳定义如下:

  • 阶数为0的斐波那契树为空
  • 阶数为1的斐波那契树是单个节点
  • n+2阶斐波那契树是一个节点,其左子节点是n阶斐波那契树,右子节点是n+1阶斐波那契树
例如,下面是一个5阶斐波那契树:

斐波那契树表示AVL树可以具有的最大倾斜量,因为如果平衡因子再不平衡,每个节点的平衡因子将超过AVL树设置的限制

您可以使用此定义非常轻松地生成最大不对称AVL树:

function FibonacciTree(int order) {
    if order = 0, return the empty tree.
    if order = 1, create a single node and return it.
    otherwise:
        let left  = FibonacciTree(order - 2)
        let right = FibonacciTree(order - 1)
        return a tree whose left child is "left" and whose right child is "right."

希望这有帮助

回答得好。如果有一个图像与之匹配就好了。(请特别注意,每个非叶子都有不同于0的平衡“因子”)。另请参见: