平衡二叉查找树
树中任意一个节点的左右子树的高度相差不能大于1
平衡二叉查找树是AVL树,它严格符合我刚讲到的平衡二叉查找树的定义,即任何节点的左右子树高度相差不超过1,是一种高度平衡的二叉查找树。
红黑树(不严格的平衡二叉查找树)
一棵红黑树还需要满足这样几个要求:
-
根节点是黑色的;
-
每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;
-
任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;
-
每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点;
实现红黑树的基本思想 左旋(rotate left)、右旋(rotate right)
AVL树与红黑树区别
AVL树是一种高度平衡的二叉树,所以查找的效率非常高,但是,有利就有弊,AVL树为了维持这种高度的平衡,就要付出更多的代价。每次插入、删除都要做调整,就比较复杂、耗时。所以,对于有频繁的插入、删除操作的数据集合,使用AVL树的代价就有点高了。
红黑树只是做到了近似平衡,并不是严格的平衡,所以在维护平衡的成本上,要比AVL树要低。
红黑树是一种平衡二叉查找树。它是为了解决普通二叉查找树在数据更新的过程中,复杂度退化的问题而产生的。红黑树的高度近似log2n,所以它是近似平衡,插入、删除、查找操作的时间复杂度都是O(logn)。
因为红黑树是一种性能非常稳定的二叉查找树,所以,在工程中,但凡是用到动态插入、删除、查找数据的场景,都可以用到它。