【数据结构】—— 比较二叉搜索树,AVL树,红黑树

这里只对树的特点,操作,性能三方面进行总结,详细内容可通过链接了解。

1. 二叉搜索树:——升序数组

https://blog.csdn.net/ly_6699/article/details/89738967
1)特点: 在树中,左孩子的值小于根节点的值小于右孩子的值。
所以如果中序遍历二叉搜索树会得到一个升序排列的数组。
2)操作: 二叉搜索树中,查找可直接按二叉树的性质进行操作,插入的话不允许插入相同的值;删除的时候,需要分情况处理,主要是需要找到删除节点的父节点和子节点将他们链接起来。
3)性能: 二叉树的操作很简单,但是查找的效率因为插入顺序的不同会有很大的不确定性,导致当插入的数据形成单支树时查找的性能极其低下。

因此我们用AVL树的平衡性优化二叉树的查找效率。

2. AVL树:——严格平衡:升序+左右高度差小于1

https://blog.csdn.net/ly_6699/article/details/89787189
1)特点: AVL树除了有二叉树的特点外,还有另外一个特点:
要求AVL树中任何结点左右子树的高度差不大于1。
2)操作: AVL树中,查找和删除方式与二叉搜索树相似。但是每次插入新的结点以后,若不满足平衡就用旋转使得树的平均高度降低,从而提高查找的效率。
3)性能: AVL树使得二叉搜索树的查找性能提高,但同时带来了插入性能降低的问题,因为要频繁的旋转。

因此我们用红黑树的近似平衡优化AVL树的插入性能。

3.红黑树:——近似平衡:升序+最长路径不超过最短路径的两倍

https://blog.csdn.net/ly_6699/article/details/89792397
1)特点: 红黑树除了二叉树的特点外,还有另外一个特点:
要求红黑树中任意节点到其叶子节点的最长路径不超过最短路径的两倍
2)操作: 红黑树的查找和删除方式与二叉树相似。并且每次插入新结点后,只有路径长度不满足关系时才需要旋转,其他时候都只需要变色就好,由此减少了旋转的次数,从而提高了插入的效率。
3)性能: 红黑树降低了插入时需要旋转的次数,从而相对于AVL树对二叉搜索树的性能做到了更优化。

由此可见,红黑树拥有在插入结点时旋转次数少,而且更容易控制的优点。因此在实际操作中用到的更多一些。

你可能感兴趣的:(C++,/,数据结构,二叉搜索树,AVL树,红黑树)