AVL树(Java)
AVL树 在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。 特点 1.本身首先是一棵 二叉搜索树 。 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。也就是说, AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树) 平衡因子 某 结点的左子树与右子树的高度(深度)差 即为该结点的平衡因子(BF,Balance Factor)。平衡二叉树上所有结点的平衡因子只可能是 -1,0 或 1。 高度(height) 为了方便计算每一结点的平衡因子我们可以为每个节点赋予height这一属性,表示此节点的高度。 这里的高度是由叶子节点从下向上计算的,叶子节点的height是1,叶子节点的父节点height是2,以此类推。 旋转 AVL树的基本操作一般涉及运做同在不平衡的二叉查找树所运做的同样的算法。但是要进行预先或随后做一次或多次所谓的"AVL 旋转"。 假设由于在二叉排序树上插入结点而失去平衡的最小子树根结点的指针为a(即a是离插入点最近,且平衡因子绝对值超过1的祖先结点),则失去平衡后进行进行的规律可归纳为下列四种情况: 单向右旋平衡处理LL :由于在a的左子树根结点的左子树上插入结点,a的平衡因子由1增至2