记-数据结构与算法-二分搜索树、平衡二叉树

二叉搜索树

定义

一种在有序数组中查找某一特定元素的搜索算法,称之为二叉查找或者二分查找法。

在树结构中类似,从中间元素开始查找,对比大小,缩小搜索范围。

而二叉(分)查找(搜索)树,

每个节点的key值大于左子节点,小于右子节点,不一定是二叉树。

借助这个性质,二叉搜索树不仅可以用来搜索查找数据,还可以高效地插入、删除数据。

遍历

二叉树的前序遍历、中序遍历、后序遍历

添加

遵循插入元素大于中间元素向右支走,小于中间元素左支走,不断迭代循环。

删除

分为三类:

  1. 没有子类,直接删除
  2. 有一个子类,目标节点被删除,将子节点移动到已删除节点的位置
  3. 有两个子类,目标节点被删除,从删除节点的左子树中找到最大的节点,将其移到到删除的节点的位置
局限

二分搜索树一旦退化成单链表,查找搜索效率和插入删除效率降低。

平衡二叉树(AVL树)

Wiki

在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是 O(logn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL 树得名于它的发明者 G. M. Adelson-Velsky 和 Evgenii Landis。

优势

针对于二叉搜索树查找效率取决于树的高度,只要保证树的高度就可以保证搜索效率。经过研究,当节点数目一定,保持树的左右两端平衡,就是平衡二叉树。

即要求,任意左右子树的高度差只能是-1、0、1三个数值,这被称之为平衡二叉树。

另外,上面所谓树的高度差和深度差都可以表述成平衡二叉树的平衡因子。平衡因子只能取-1、0、1。

AVL树插入后最小失衡树与左右旋调整

最小失衡树:在新插入的节点向上查找,以第一个平衡因子的绝对值超过 1 的节点为根的子树称为最小不平衡子树。

失衡调整方法:通过旋转最小失衡子树来实现的


失衡调整方法.jpeg
AVL树删除节点

需要重新检查平衡性并且修正,通过左右旋就能得到。

小结

平衡二叉树的优势在于当二叉树退化成单链表失衡,固定了树的高度,保证了查找搜索效率。

但是为了保证平衡性,损失了在动态插入和删除的效率

因此需要其他灵活性修改,例如红黑树(不是真正的平衡二叉树,借鉴了思想,理论基础2-3-4树等。)

你可能感兴趣的:(记-数据结构与算法-二分搜索树、平衡二叉树)