树
1、二叉搜索树(BST)
- 「左⼩右⼤」,对于每个节点,整棵左⼦树都⽐该节点的值⼩,整棵右⼦树都⽐该节点的值⼤。
- BST 的中序遍历结果是有序的(升序)
- 缺点:容易退化成一条链,查找的时间复杂度从O(log2N)退化成O(N)
思路
2、平衡二叉树(AVL)
-
在二叉搜索树的基础上加了限制:左右子树的高度差不能超过1
-
每次进行插入/删除操作时,几乎都需要通过旋转操作保持平衡
-
左旋:逆时针旋转两个节点,让一个节点被它的右子节点取代,而这个节点就成了右子节点的左子节点
-
右旋:顺时针旋转两个节点,让一个节点被他的左子节点取代,而这个节点就成了左子节点的右子节点
-
缺点:在插入/删除比较频繁的场景中,需要频繁的旋转操作,这时候AVL的性能大打折扣
3、红黑树(具有自动平衡机制的二叉搜索树,弱平衡二叉树)
(1) 规则
- 节点为红色或者黑色;
- 根节点必须为黑色;叶子节点(null)为黑色;
- 红黑树不会出现连续的红色节点;
- 每个节点到叶子节点的所有路径,