二叉树概念(二)

平衡二叉树 AVL树(Adelson-Velsky 和 Landis)

左子树和右子树的高度之差的绝对值小于等于1

C++ 中,可以直接使用 std::set 类作为平衡二叉树;Java 中,可以直接使用 TreeSet。在 Python 中,没有内置的库可以用来模拟平衡二叉树。

力扣

红黑树 (Red-Black Tree)

二叉树概念(二)_第1张图片

是一种二叉搜索树,但不是平衡二叉搜索树。红黑树的每个节点多占用一位用于表示颜色。

 二叉搜索树的平均查找时间复杂度是O(logN), 然而在下面这种情况中(不平衡二叉搜索树)会恶化到O(N)

为了解决这个问题提出了红黑树,自然我们会问,如果只是追求平衡,那用平衡二叉树AVL就可以了,那AVL和红黑树的异同是什么?

同:红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(log2N )

异:

红黑 不追求绝对平衡,只需保证最长路径不超过最短路径的2倍,降低了插入时发生旋转的次数
  • 在经常进行删除,查找的结构中性能更优(红黑树需要的旋转更少)
  • 实现简单

你可能感兴趣的:(算法,树)