跟前面一样,主要是平衡度的问题,RB树是通过节点上的颜色来识别是否平衡的。那么关键是 怎么知道是否平衡,怎么恢复平衡。
首先 每个节点有一个成员用于记录节点的颜色:
默认节点的颜色为红色,因为插入的叶子节点都是红色的。
是否平衡通过判断。插入的节点和其父节点的颜色来比较。
恢复平衡 跟前面一样。通过旋转得到,单旋(左旋,右旋),双选(左旋+右旋,右旋+左旋):
插入和删除就比较容易了,主要是通过递归思想:
源码:
跟前面一样,主要是平衡度的问题,RB树是通过节点上的颜色来识别是否平衡的。那么关键是 怎么知道是否平衡,怎么恢复平衡。
首先 每个节点有一个成员用于记录节点的颜色:
默认节点的颜色为红色,因为插入的叶子节点都是红色的。
是否平衡通过判断。插入的节点和其父节点的颜色来比较。
恢复平衡 跟前面一样。通过旋转得到,单旋(左旋,右旋),双选(左旋+右旋,右旋+左旋):
插入和删除就比较容易了,主要是通过递归思想:
源码: