二叉搜索树在最坏情况下会形成一条链,平衡二叉树的出现解决了这个问题
概念
平衡二叉树,又被称为AVL树,且具有以下性质:
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 —-来自百度百科
如下图,
如何构造平衡二叉树?
构造二叉树的时候,每次插入一个结点都去判断它是否平衡,如果不平衡就要调整,让它平衡。下面有四种调整情况:
下面四种情况,树的大小顺序规则(左孩子小于根结点,右孩子大于根结点)都不会被破坏
- RR情况-----需要左旋
RR:就是新插入的结点插在了失衡结点的右子树的右子树上
调整:把失衡结点左旋
左旋步骤:
令失衡结点为a,它的右孩子为b,令:
a.right=b.left
b.left=a
例:
对上图失衡结点 2 进行左旋,结果如下图
- LL情况-----右旋
LL:就是新插入的结点插在了失衡结点的左子树的左子树上
调整:把失衡结点右旋
步骤:令失衡结点为a,它的左孩子为b,
a.left=b.right
b.right=a
例:
下图插入结点 1 之后,发现结点5失衡了,且插入的结点1在失衡结点5的左子树的左子树上,所以是LL情况,需要右旋