平衡二叉树是一种特殊的二叉搜索树,它具有以下特点: 每个节点的左子树和右子树的高度差不超过1。 所有的子树也都是平衡二叉树。 通过保持平衡性,平衡二叉树可以在最坏情况下仍然具有较好的性能,保证查找、插入和删除操作的时间复杂度为O(log n)。 平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树...
在这里,我们首先需要明确一个点:就整棵树而言调整平衡的方法可能不唯一,哪怕是同一种类型都可能存在多种调整平衡的方法,但是: 一棵平衡二叉树是因为新插入结点而导致不平衡的,所以我们只需要对最小失衡子树进行平衡调整,整棵树也会跟着平衡(插入结点导致高度改变,平衡调整是使得高度复原),所以并不需要整棵树进行调...
可以采用动态平衡技术保持一个平衡二叉树。构造平衡二叉树的时候,也可以采用相同的方法,默认初始时,是一个空树,插入节点时,通过动态平衡技术对二叉树进行调整。 Adeleon-Velskii和Landis提出了一个动态地保持二叉排序树平衡的方法,其基本思想是:在构造二叉排序树的过程中,每当插入一个结点时,首先检查是否因插入而破坏...
图一中左边二叉树的节点45的左孩子46比45大,不满足二叉搜索树的条件,因此它也不是一棵平衡二叉树。 右边二叉树满足二叉搜索树的条件,同时它满足条件二,因此它是一棵平衡二叉树。 平衡因子:可通过计算非叶子结点的平衡因子来判断该树是否为平衡二叉树(叶子节点的平衡因子均为0)。 平衡因子 = 左子树高度 - 右子...
5. AVL树插入时的失衡与调整 图5.1 是一颗平衡二叉树 图5.1 在此平衡二叉树插入节点 99 ,树结构变为: 动图5.2 在动图 5.2 中,节点 66 的左子树高度为 1,右子树高度为 3,此时平衡因子为 -2,树失去平衡。 在动图 5.2 中,以节点 66 为父节点的那颗树就称为最小失衡子树。
此时按照之前的实现算法性能退化成了O(n),所以如何构造二叉排序树很重要,我们的理想情况是满二叉树和完全二叉树,它们的性能都是O(logn),所以我们在构造二叉排序树的时候要尽可能向它们靠近,才能得到最佳的操作性能,由此引出了我们今天的话题 —— 平衡二叉树。
平衡二叉树的旋转分类 平衡二叉树在插入和删除的时候都有可能发生旋转来维持平衡,总得来说,旋转分四种情形: (1)左旋转 如下图,对二叉搜索树分别插入1,2,3升序序列,会导致树向右倾斜,这个我们需要左旋来平衡树: 第一张图标记了,当插入3之后,根节点1失衡了,因为1节点没有左子树,所以左子树的高度等于0,而右子...
平衡二叉树(Balanced binary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树。定义:平衡二叉树或为空树,或为如下性质的二叉排序树:(1)左右子树深度之差的绝对值不超过1;(2)左右子树仍然为平衡二叉树.平衡因子BF=左子树深度-右子树深度.平衡二叉树每个...
答:(AVL)平衡二叉树是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1。它是一种高度平衡的二叉排序树。意思是说,要么它是一棵空树,要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。 PS: 左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1结果...
二、平衡二叉树调整 若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树,然后再调整这个子树,使之成为新的平衡子树。当失去平衡的最小子树被调整为平衡子树后,无需调整原有其他所有不平衡子树,整个二叉排序树就又成为一棵平衡二叉树。