数据结构 | 二叉搜索树,平衡二叉树

二叉搜索树

所有的节点都满足左子树的所有节点都比自己的小,而右子树上的所有节点都比自己大这一条件。

数据结构 | 二叉搜索树,平衡二叉树

可高效进行如下操作:

  • 查询是否包含某个数值
  • 插入一个数值
  • 删除某个数值

查询:

找——>找——>找

数据结构 | 二叉搜索树,平衡二叉树

插入:

找——>找——>找

数据结构 | 二叉搜索树,平衡二叉树

删除:

搜索删除数值->找该位置替代元素

  • 需要删除的节点没有左儿子,那么就把右儿子提上去。
  • 需要删除的节点的左儿子没有右儿子,那么就把左儿子提上去。
  • 以上两种情况都不满足的话,就把左儿子的子孙中最大的节点提到需要删除的节点上。
数据结构 | 二叉搜索树,平衡二叉树

二叉搜索树的时间复杂度

这三种操作,所花的时间都和树的高度成正比。
如果共有n个元素,那么平均每次操作需要O(logn)的时间复杂度。

平衡二叉树

数据结构 | 二叉搜索树,平衡二叉树

平衡二叉树为了避免这种退化的情况发生,巧妙的使用旋转操作来保持树的平衡。
平衡二叉树: 它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
或一棵空树。
数据结构 | 二叉搜索树,平衡二叉树
????平衡二叉树的常用实现方法:

  • 红黑树
  • AVL
  • 替罪羊树
  • Treap
  • 伸展树