平衡二叉树是在二叉查找树(二叉查找树(BST:Binary Search Tree) )的基础上发展而来的。
平衡二叉树(AVL树),指的是左子树上的所有节点的值都比根节点的值小,而右子树上的所有节点的值都比根节点的值大,且左子树与右子树的高度差最大为1。所以,平衡二叉树满足所有二叉排序(搜索)树的性质。而名字AVL,则是取自两个发明平衡二叉树的科学家的名字:G. M. Adelson-Velsky和E. M. Landis。
一个新的数据结构不是凭空产生的,我们先看一下二叉查找树的作用。有了二叉查找树这一数据结构,当你要查找一个值,就不需要遍历整个序列或者说遍历整棵树了,可以根据当前遍历到的结点的值来确定搜索方向。这种思维在搜索中被叫做“剪枝”,把不必要的分枝剪掉可以提高搜索效率。在二叉查找树中查找值,每次都会把搜索范围缩小,与二分搜索的思维类似。
举例看一下下图所示二叉查找树:
![0f050b83e2d7583aa7ded9713407a1ab.png](https://img-blog.csdnimg.cn/img_convert/0f050b83e2d7583aa7ded9713407a1ab.png)
图1 典型的二叉查找树
假设我们想要查找节点7,先到达根节点,它的值大小为6;7比6大,继续往右子树上找,到达8;7比8小,往左子树上查找,最终找到7。
二叉查找树可以使插入、搜索的效率大大提高,为什么还要发明平衡二叉树这一数据结构?
二叉查找树的结构与值的插入顺序有关