平衡二叉树(AVL树)

平衡二叉树

前言

平衡二叉树要求每个根节点的左右子树的 高度差 <= 1,并且平衡二叉树还是一个搜索树(需要满足,根节点的左子树的权值都小于根节点的权值,根节点右子树的权值都大于根节点的权值,每一个根节点都是这样的)

平衡二叉树调整平衡的方法和步骤

四种方法:

1、LL型旋转:一个根节点由于左孩子的左子树增加节点而导致不平衡,需要把根节点向右旋转变成他左孩子的右孩子,而他左孩子的右子树作为根节点的左子树,即可。

2、RR型旋转:一个根节点由于右孩子的右子树增加节点而导致不平衡,需要把根节点向左旋转变成他右孩子的左孩子,而他右孩子的左子树作为根节点的右子树,即可。

3、LR型旋转:一个根节点由于左孩子的右子树增加节点而导致不平衡,需要拿出左孩子的右子树中的最大的值。
这里分两种情况:
1)如果最大值是新添加的节点:
	我们需要将他直接拿出来,根节点的左子树作为它的左子树,根节点及根节点的右子树作为它的右子树。
2)如果最大值不是新添加的节点:
	我们需要将新添加的节点的父亲节点拿出来(这里拿出来的节点叫A),新添加的节点替代他父亲的位置,根节点的左子树作为A的左子树,根节点及根节点的右子树作为A的右子树。
	
4、RL型旋转:
一个根节点由于右孩子的左子树增加节点而导致不平衡,需要拿出右孩子的左子树中的最小的值。
这里分两种情况:
1)如果最小值是新添加的节点:
	我们需要将他直接拿出来,根节点的右子树作为它的右子树,根节点及根节点的左子树作为它的左子树。
2)如果最小值不是新添加的节点:
	我们需要将新添加的节点的父亲节点拿出来(这里拿出来的节点叫A),新添加的节点替代他父亲的位置,根节点的右子树作为A的右子树,根节点及根节点的左子树作为A的左子树。

步骤:

1、从下向上找到第一个不满足平衡的根节点。
2、判断影响平衡的方式是什么,即LL、LR、RL、RR哪种类型
3、通过判断的类型,去使用相应的方法去调整平衡

总结

四种调整类型和找到第一个不满足平衡的根节点是至关重要的,有很多文章说的都是向左向右旋转,简单的例子容易理解,可当复杂的树情况的时候,就不好理解了,用了一天的时间加以总结,在这里写出全部的步骤,喜欢的朋友可以举出几个例子,跟着步骤和四种类型的方法去尝试一下,就会豁然开朗。

上一篇:数据结构与算法-基础(十一)AVL 树


下一篇:Dojo页面布局设计