平衡树(Balance Tree)

简介(Introduction)

平衡树 (Balance Tree,BT) 指的是,任意节点的子树的高度差都 \(\le1\)
常见的符合平衡树的有,B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。



描述(Description)

  • 平衡树是在维持 \(BST\) 性质的基础上,通过改变二叉查找树的形态,使得树上每个节点的左右子树达到 平衡,从而使树的 深度 维持在 \(O(\log n)\) 级别

  • 从下往上(叶节点向根节点)看,当树的高度差 \(>1\) (不平衡)时,此时需要对该根节点进行 “旋转” 操作

  • 基本操作:(详情请见示例)

    • 右旋 \((zig)\): \(zig(p)\) 可以理解为把 \(p\) 的左子节点围绕着 \(p\) 向右旋转
    • 左旋 \((zag)\): \(zag(p)\) 可以理解为把 \(p\) 的右子节点围绕着 \(p\) 向左旋转

  • 四种旋转情况:
    1. 左左 \((LL)\):进行一次 右旋
    2. 右右 \((RR)\):进行一次 左旋
    3. 左右 \((LR)\):先进行一次 左旋,进行一次 右旋
    4. 右左 \((RL)\):先进行一次 右旋,进行一次 左旋

  • 操作:
    1. 遍历二叉搜索树
    2. 查找最小/最大值
    3. 插入一个元素
    4. 删除一个元素
    5. 求元素的排名
    6. 查找排名为 \(k\) 的元素



示例(Example)

  • 平衡树
    image

  • 插入
    image

  • 左旋 \(\&\) 右旋
    image

  • 四种旋转情况
    image


posted @ 2023-05-06 14:08  FFex  阅读(90)  评论(0编辑  收藏  举报