二叉查找树:#
二叉查找树就是左结点小于根节点,右结点大于根节点的一种排序树,也叫二叉搜索树。也叫BST,英文Binary Sort Tree。
就长下面这吊样
![1180e19756c4afc60496bc35ff052ca3.png](https://i-blog.csdnimg.cn/blog_migrate/d4c4b9d365e225f21960642b66030150.jpeg)
查找步骤#
在二叉搜索树b中查找x的过程为:
若b是空树,则搜索失败,否则:
若x等于b的根节点的数据域之值,则查找成功;否则:
若x小于b的根节点的数据域之值,则搜索左子树;否则:
查找右子树。
![db6e22d81051e1bdcf6fe8ee58a06c06.gif](https://i-blog.csdnimg.cn/blog_migrate/0fea363516d784b4cf80f4ca3a6b630a.gif)
二叉搜索树的构造#
![eda9e855150f8c578a152a8022e49a29.gif](https://i-blog.csdnimg.cn/blog_migrate/4bf4186af040d72befea14c02ee2473d.gif)
往BST中插入元素#
![6774d1843b985993155545d314f549ac.gif](https://i-blog.csdnimg.cn/blog_migrate/8d09b5942f4db8a23519e73ed2830c5e.gif)
BST转成有序数组#
![7ab0c89707e611252995b4b30c873f5c.gif](https://i-blog.csdnimg.cn/blog_migrate/d718de09c855c85afb222f81f1e40220.gif)
二叉查找树比普通树查找更快,查找、插入、删除的时间复杂度为O(logN)。但是二叉查找树有一种极端的情况,就是会变成一种线性链表似的结构。此时时间复杂度就变味了O(N),为了解决这种情况,出现了二叉平衡树。
平衡二叉树#
平衡二叉树全称平衡二叉搜索树,也叫AVL树。是一种自平衡的树。
AVL树也规定了左结点小于根节点,右结点大于根节点。并且还规定了左子树和右子树的高度差不得超过1。这样保证了它不会成为线性的链表。AVL树的查找稳定,查找、插入、删除的时间复杂度都为O(logN),但是由于要维持自身的平衡,所以进行插入和删除结点操作的时候,需要对结点进行频繁的旋转。
一个有序数组被插入到平衡二叉树#
![8c7496be7f1309ea4e047f9124df1736.png](https://i-blog.csdnimg.cn/blog_migrate/90152bb4ab2f1a437d1d3902b4f2bea3.jpeg)
![a5fc9dcd37e5581bd3028bee2acc122c.png](https://i-blog.csdnimg.cn/blog_migrate/8bb28a7e810d53a11a62c0990aedcd9f.jpeg)
右旋#
我们知道,AVL树不仅是一颗二叉查找树,它还有其他的性质。如果我们按照一般的二叉查找树的插入方式可能会破坏AVL树的平衡性。同理,在删除的时候也有可能会破坏树的