AVL:右旋,更新高度

问题描述 投票:0回答:1

我正在阅读 AVL 树的教程https://www.programiz.com/dsa/avl-tree 在实施右旋 https://www.programiz.com/dsa/avl-tree # 执行右旋转的函数

def rightRotate(self, z):
    y = z.left
    T3 = y.right
    y.right = z
    z.left = T3
    z.height = 1 + max(self.getHeight(z.left),
                       self.getHeight(z.right))
    y.height = 1 + max(self.getHeight(y.left),
                       self.getHeight(y.right))
    return y

我不明白为什么我们只需要改变这些高度。

例如这里:

8、9 和 11 都改变了高度,但根据我的理解,只有 9 和 11 的高度会被告知。

algorithm data-structures avl-tree
1个回答
0
投票

示例中节点(节点 8)的左子树和右子树不会受到右旋转的影响,因此该节点的高度不需要更改。 (因为一个节点的高度等于1 + max(左子树的高度,右子树的高度))。

© www.soinside.com 2019 - 2024. All rights reserved.