vis
vis

Reputation: 2279

Can I insert data unsorted in Red-black tree?

While I'm still struggling to find a solution for this question, i have another one which maybe is easier. The following is the insert function of Okasaki red-black tree implementation. What I want to do is to keep the data unsorted as i insert into the tree. So the data always go to the leftmost/bottom-most leaf everytime i insert. There is no need to compare for x < y, x > y or x == y. It seems pretty straightforward at first by just removing these guards and only do: ins s@(T color a y b) = balance color (ins a) y b. The behaviour seems to be that the tree is kept balanced but the coloring becomes a bit messed up. And eventually that affects future inserts.. Any idea how this can be achieved? I think this could possibility my first step to my previous question. I just started playing with Haskell, so I am not getting it right straightforward. Thanks a lot.

insertSet x s = T B a y b
  where ins E = T R E x E
        ins s@(T color a y b) =
          if x < y then balance color (ins a) y b
          else if x > y then balance color a y (ins b)
          else s

['d','a','s','f']   s
                   /\
                  a  f
                 /
                d        (unsorted tree)

Upvotes: 1

Views: 348

Answers (1)

wuxb
wuxb

Reputation: 2612

you can use my RBTree implementation in haskellDB, http://hackage.haskell.org/package/RBTree

using the insert function:

insert :: (a -> a -> Ordering) -> RBTree a -> a -> RBTree a

feed it a (\_ _ -> LT) function, then you can always put new element into left-most place.

Upvotes: 1

Related Questions