平衡二叉树 AVL树(Adelson-Velsky 和 Landis)
左子树和右子树的高度之差的绝对值小于等于1
C++ 中,可以直接使用 std::set 类作为平衡二叉树;Java 中,可以直接使用 TreeSet。在 Python 中,没有内置的库可以用来模拟平衡二叉树。
力扣
红黑树 (Red-Black Tree)
是一种二叉搜索树,但不是平衡二叉搜索树。红黑树的每个节点多占用一位用于表示颜色。
二叉搜索树的平均查找时间复杂度是O(logN), 然而在下面这种情况中(不平衡二叉搜索树)会恶化到O(N)
为了解决这个问题提出了红黑树,自然我们会问,如果只是追求平衡,那用平衡二叉树AVL就可以了,那AVL和红黑树的异同是什么?
同:红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(log2N )
异:
红黑 | 不追求绝对平衡,只需保证最长路径不超过最短路径的2倍,降低了插入时发生旋转的次数 |
|