AVL trees always felt simpler to me than red-black. Here’s a quick implementation in Haskell, adapted from some code I found online. Delete seems to be about as complex as insert. It might have bugs, but I’m pretty sure the correct version would be about as long.
Edit: it seems like someone has implemented deletion for RB trees in Haskell as well, and it’s doesn’t look too complicated. I haven’t checked it carefully though.
AVL trees always felt simpler to me than red-black. Here’s a quick implementation in Haskell, adapted from some code I found online. Delete seems to be about as complex as insert. It might have bugs, but I’m pretty sure the correct version would be about as long.
Edit: it seems like someone has implemented deletion for RB trees in Haskell as well, and it’s doesn’t look too complicated. I haven’t checked it carefully though.