平衡二叉树
1. 平衡二叉树的基本概念
1.1二叉查找树的问题
在极端的情况下,二叉树就会转换成链表,高度太高,效率变低
1.2平衡二叉树的概念
任意结点的左子树或右子树的度相差 不超过1
1.3平衡二叉树的作用
通过降低树的高度,从而提高效率
2. 平衡二叉树的左旋右旋
2.1 左旋或者右旋的触发时机
当在树中进行增删操作后,如果破坏了原本树的平衡性,此时就会用左旋或右旋调整树,以达到平衡
2.2 左旋的过程
- 让当前结点成为当前结点右子结点的左子结点;
- 让当前结点的右子结点的左子结点成为当前结点的右子结点;
- 让当前结点的父结点指向当前结点的右子结点;
左旋:就是将结点的右侧往左拉,原先的右子结点变成新的父结点,并把多余的左子结点出让给已降级的根结点当右子结点;
2.3右旋的过程
- 让当前结点成为当前结点左子节点的右子结点;
- 让当前结点的左子结点的右子结点成为当前结点的左子结点;
- 让当前结点的父结点指向点前结点的左子结点;
右旋:就是将结点的左侧往右拉,原先左子结点变成了新的父结点,并 把多余的右子结点让出给已降级的根结点当右子结点
2.4平衡二叉树旋转的四种情况
2.4.1左左
- 当某个结点的左子结点的左子树添加了一个新的结点
- 以当前结点为基准,进行右旋
2.4.2 左右
- 当某个节点的左子节点的右子树添加了一个新的结点
-
- 以当前结点的左子结点为基准,进行左旋
- 以当前结点为基准,在进行右旋
-
2.4.3 右右
- 当某个结点的右子结点的右子树添加了一个新的结点
- 以当前结点为基准,进行左旋
2.4.4右左
- 当某个结点的右子结点的左子树添加了一个新的结点
-
- 以当前结点的右子结点为基准,进行右旋
- 以当前结点为基准,进行左旋
-