平衡二叉树(BST)
平衡二叉(查找、排序、搜索)树
(二叉排序树就查找怎么比二分便利了?)
-
应用场景:
当出现某一个子树非常长,如出现斜树,这样用二叉树来查找插入的话复杂度过高,需要优化。
这时当我们约束左右子树的高度差,将平衡因子控制在-1~1,虽然增加了查找的代码量(?),但可以优化斜树情况。 -
性质:
- 可以是空树
2.。。。。
- 一些概念:
-
平衡:左子树结点和右子树结点的高度差绝对值不能大于1.(差==平衡因子)
平衡因子:只能为1,0,-1
![]()
-
高度:
![]()
![]()
![]()
当不平衡时的方法:
1.左旋

步骤:
-
将(失衡结点的)右孩子结点(77)替代需平衡结点(66)的位置
-
右孩子(77)的左子树(72)变成该节点(66)的右结点。
-
该结点(66)变成右孩子(77)的左子树。
![]()
-
右旋同理
插入操作
1. 向左孩子的左子树插入结点/向右孩子的右子树插入结点。
如上,做单次右旋/左旋即可
2. 向左孩子(60)的右子树插入结点(64)

此时不能简单右旋了,
因为右旋动的是左孩子的右结点65,(将它移到失衡结点的左子节点),而此时情况下,65-64是失衡的关键,移动后只是将失衡带到了右子树。
-
先将左子树做左旋,使左孩子的右子树只有一个结点64
![]()
-
再整体做右旋
![]()
3.向右孩子的左子树插入结点

-
先对右孩子树进行右旋
![]()
-
再进行左旋
![]()
删除操作
(结合之前二叉树的删除操作即可)
1.待删是根节点
2.待删只有左或右子节点
3.待删左右结点都有
替代结点为:
(1)左子树的最大结点
(2)右子树的最小结点
---------------------------------最后:代码下次更新,咕咕~ =。=










浙公网安备 33010602011771号