由前苏联的数学家Adelse-Velskil 和Landis 在 1962 年提出的高度平衡的二叉树,根据科学家的英文名也称为 AVL 树。它具有如下几个性质: 可以是空树。 假如不是空树,任何一个节点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过 1。 平衡之意,如天平,即两边的分量大约相同。 例如图 2.1 不是平...
平衡二叉排序树(Balanced Binary Tree或Height-Balanced Tree)是在1962年由Adelson-Velskii和Landis提出的,一种高度平衡的排序二叉树,其每一个节点的左子树和右子树的高度差最多等于1,又称AVL树。 如果一棵二叉树既是二叉排序树又是平衡二叉树,称为平衡二叉(查找)排序树(Balanced Binary Sort Tree) 。 平衡二叉树...
节点3的左右子树高度为1,符合AVL平衡二叉树的性质,同理我们再看节点k2,左子树高度为1,右子树高度为0,高度差为1,也符合AVL平衡二叉树。再看节点k1,左子树k2的高度为2,右子树的高度为0,相差为2,所以在节点k1处不满足AVL平衡二叉树的性质,我们要进行调整,使得以k1为根节点的树变为一个AVL平衡二叉树,我们要怎...
AVLNode*lchild, *rchild;intBF;//平衡因子}; 前面与二叉树一样,BF用于累计高度差,因为查询高度是一个枯燥的递归操作。 这里用到了数学归纳的知识,一开始,树的BF是满足要求的,那么,我们对树的每个操作若可以保证BF满足条件要OK,由于后面的操作建立在前面的操作之上,只要保证了每一步操作的可靠性,那么BF的正确...
平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树,可以保证查询效率较高。 具有以下特点:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。
AVL树是二分搜索树的优化版,又称平衡二叉树。 二分搜索树的性能分析: 根据二分搜索树的特点,如果给定一个有序的序列来创建二分搜索树,比如给定序列为:1,2,3,4,5,6 那么就会得到如右侧这样的向一侧偏斜的结构,事实上向一侧偏斜的二分搜索树其实就是一个链表。二分搜索树在最好的情况下只需要O(logn)的时...
前面的两个数列,进行单旋转(即一次旋转)就可以将非平衡二叉树转成平衡二叉树,但是在某些情况下,单旋转 不能完成平衡二叉树的转换。比如数列 int[] arr = { 10, 11, 7, 6, 8, 9 }; 运行原来的代码可以看到,并没有转成 AVL 树.int[] arr = {2,1,6,5,7,3}; // 运行原来的代码可以看到,并...
AVL树 PS:添加【可能会导致所有祖先节点都失衡、之哟啊让高度最低的失衡节点恢复平衡,整棵树就恢复平衡O[1]次调整、】,删除【只可能会导致父节点失衡或祖先节点【左右一个节点失衡】,恢复平衡后,可能会导致更高层的祖先节点失衡,最多需要O(logn)次调整】,平均时间复杂度【搜索O(logn),添加O(logn),仅需O(...
二、AVL树的构建 1、基本术语 有四种情况可能导致二叉查找树不平衡,分别为: (1)左左型LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2。 (2)右右型RR:插入一个新节点到根节点的右子树(Right)的右子树(Right),导致根节点的平衡因子由-1变为-2。
上图中,原本以k1为根节点的树是一个AVL平衡二叉树,这时,我们向树中插入节点2,根据二叉查找树的性质,最后节点2插入的位置如上图。插入节点后,我们每个节点分析一下,看看节点是否还符合AVL平衡二叉树的性质。我们先看看节点3,插入节点2后,节点3的左子树的高度是0,因为只有一个节点2。再看节点3的右子树,右子树为...