AVL树的插入、删除、查找操作
AVL树 是一种带有平衡条件的二叉查找树,所有节点都是基于平衡的。所谓平衡,即某个节点的左右子树的高度差最多相差1。空树的高度定义为-1。 下面我们通过如下两棵树(图片来自《数据结构与算法分析–C语言描述》)进一步了解怎样的树才是AVL树。 上图只有左边的树才是AVL树,那么下面我们来分析一下左边的树 (某个节点的高 = MAX(子树的高, 右子树的高 )+ 1) 节点3的高为0 节点4的高为1 节点1的高为0 节点7的高为0 节点2的高为2 节点8的高为1 节点5的高为3 你可以看到任一节点的左右子树的差都没有超过2,那么我们再看看右边的树 节点2的高为2 节点8的高为0 所以对于节点7来说,左右子树的高度差相差为2 > 1,失去平衡。 下面我们接着来说AVL的插入、删除、查找操作。 插入和删除操作都有可能导致AVL树的不平衡 (为什么呢?原来的树是平衡的,即某个节点的左右子树的高度差小于2,假设左子树的高为1,右子树的高为0,如果这个时候,在这个节点的左子树插入一个节点,那么该节点的左右子树的高度差就为2了,删除操作也是一样的)。 对于出现不平衡的时候,需要通过 旋转 来解决。下面我们直接来看看插入操作。 插入操作 插入节点==》有可能失去平衡==》通过旋转操作来使树达到平衡 我们把需要重新平衡的节点叫做A,那么出现不平衡的情况,会有下面四种 : 1.