平衡二叉树(BST)

平衡二叉(查找、排序、搜索)树

(二叉排序树就查找怎么比二分便利了?)

  • 应用场景:
    当出现某一个子树非常长,如出现斜树,这样用二叉树来查找插入的话复杂度过高,需要优化。
    这时当我们约束左右子树的高度差,将平衡因子控制在-1~1,虽然增加了查找的代码量(?),但可以优化斜树情况。

  • 性质:

  1. 可以是空树
    2.。。。。
  • 一些概念:
  1. 平衡:左子树结点和右子树结点的高度差绝对值不能大于1.(差==平衡因子)
    平衡因子:只能为1,0,-1

  2. 高度:


当不平衡时的方法:
1.左旋


步骤:

  1. 将(失衡结点的)右孩子结点(77)替代需平衡结点(66)的位置

  2. 右孩子(77)的左子树(72)变成该节点(66)的右结点。

  3. 该结点(66)变成右孩子(77)的左子树。

  4. 右旋同理

插入操作

1. 向左孩子的左子树插入结点/向右孩子的右子树插入结点。

如上,做单次右旋/左旋即可

2. 向左孩子(60)的右子树插入结点(64)


此时不能简单右旋了,
因为右旋动的是左孩子的右结点65,(将它移到失衡结点的左子节点),而此时情况下,65-64是失衡的关键,移动后只是将失衡带到了右子树。

  • 先将左子树做左旋,使左孩子的右子树只有一个结点64

  • 再整体做右旋

3.向右孩子的左子树插入结点

  • 先对右孩子树进行右旋

  • 再进行左旋

删除操作

(结合之前二叉树的删除操作即可)

1.待删是根节点

2.待删只有左或右子节点

3.待删左右结点都有

替代结点为:
(1)左子树的最大结点
(2)右子树的最小结点

---------------------------------最后:代码下次更新,咕咕~ =。=

posted @ 2021-11-22 09:17  susuju  阅读(269)  评论(0)    收藏  举报