(z *BSNode[T])
| 193 | } |
| 194 | |
| 195 | func (t *BinarySearch[T]) deleteHelper(z *BSNode[T]) { |
| 196 | switch { |
| 197 | case z.left == t._NIL: |
| 198 | t.transplant(z, z.right) |
| 199 | case z.right == t._NIL: |
| 200 | t.transplant(z, z.left) |
| 201 | default: |
| 202 | y := minimum[T](z.right, t._NIL).(*BSNode[T]) |
| 203 | if y.parent != z { |
| 204 | t.transplant(y, y.right) |
| 205 | y.right = z.right |
| 206 | y.right.parent = y |
| 207 | } |
| 208 | |
| 209 | t.transplant(z, y) |
| 210 | y.left = z.left |
| 211 | y.left.parent = y |
| 212 | } |
| 213 | } |
| 214 | |
| 215 | func (t *BinarySearch[T]) transplant(u, v *BSNode[T]) { |
| 216 | switch { |