前言
- 本文力求用通俗易懂的方式来讲解数据结构,在介绍红黑树之前先介绍一下什么是查找二叉查找树(Binary Search Tree)简称BST,什么是平衡二叉树(Balanced Binary Tree)又称为AVL树
一、二叉查找树的定义
- 先上图
- 根据上图大家可能发现了一定的规律,每个节点的左孩子都小于此节点而右孩子都大于此节点没错这正是二叉查找树的一个特点
- 接下来咱们正规的讲一下什么是二叉查找树
- 二叉查找树可以是一颗空树(即null)为什么会这条定义呢,个人认为应该是为了程序方便运行
- 当二叉查找树不为空时有如下定义
- 若它的左子树不为空,则左子树上的节点值都小于它的根节点,若它的右子树不为空则右子树上的所有节点值都大于它的根节点
- 它的左右子树又分别为二叉查找树
二、二叉查找树有什么特点
- 例1: 将元素
3,4,5,6,7,8,9,10,11,12,13,14
存入到如下的线性表(也可以认为是数组)查找元素10
需要从线性表第一个位置即元素3开始一一比较一共需要比较8次才能找到,同理查找5需要比较3次,查找8需要比较6次,由此可以看出对于长度为N的线性表平局比较次数为(1+n)/2次,用等差数列求和公式可以推出
- 例2: 将元素
3,4,5,6,7,8,9,10,11,12,13,14
存入到如下的查找二叉树结构中查找元素10需要从根节点9开始比较由于10大于9因此去9的右子树找,11小于10去11的左子树找,10等于10成功找到,这过程一共比较了3次,同理查找5需要比较4次,查找8需要比价4次,由此可以看出对于拥有N个节点的排序二叉树查任意节点的比较次数最小为1次最大为树的高度
- **例3:**当排序二叉树像下图这样极度不均匀的话,那么他的查找效率几乎与线性表相同
三、什么是平衡二叉树
- 结合以上例子引申出平衡二叉树(Balanced Binary Tree),至于什么是平衡二叉树,先上图
- **定义:**它是一 棵空树或它的左右两个子树的高度之差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
四、关于平衡二叉树的性能分析
- 由平衡二叉树的定义可以知平衡二叉树的查询性能比较好,且稳定
- 由于平衡二叉树要时刻保持树的平衡特性,在新增和删除节点时要进行调整以保持树的平衡特性,这是一个代价比较高的操作
五 、关于平衡二叉树调整的几种方式
- 过程较为复杂,后续更新