二叉查找树:
- 某节点的左子树节点值仅包含小于该节点值
- 某节点的右子树节点值仅包含大于该节点值
- 左右子树每个也必须是二叉查找树
根据以上定义可能出现二叉树有:从数学角度上来讲右子树,显然不平衡,插叙效率不高。
一、红黑树
是一个自平衡(不是绝对的平衡)的二叉查找树。
定义:
- 每个节点都有红色或黑色
- 树的根始终是黑色的 (黑土地孕育黑树根 )
- 没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点,并没有说不能出现连续的黑色节点)
- 从节点(包括根)到其任何后代NULL节点(叶子结点下方挂的两个空节点,并且认为他们是黑色的)的每条路径都具有相同数量的黑色节点
红黑树有两大操作:
- recolor (重新标记黑色或红色)
- rotation (旋转,这是树达到平衡的关键)
平衡过程中,先尝试 recolor,如果 recolor 不能达到红黑树的 4 点要求,然后我们尝试 rotation。
参考文章— 红黑树
二、AVL树
参考文章—AVL树