虽然我仍在努力寻找this问题的解决方案,但我还有另外一个可能更容易的问题。以下是Okasaki红黑树实现的插入功能。我想要做的是在插入树时保持数据未排序。因此,每次插入时,数据总是到达最左侧/最底部的叶子。没有必要比较x< y,x> y或x == y。一开始只需要移除这些防护装置就行了起来非常简单:ins s @(T color a y b)= balance color(ins a)y b。行为似乎是树保持平衡但着色变得有些混乱。并最终影响未来的插入..任何想法如何实现这一目标?我认为这可能是我上一个问题的第一步。我刚开始玩Haskell,所以我说得不是很直接。非常感谢。
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)
答案 0 :(得分:1)
你可以在haskellDB中使用我的RBTree实现, http://hackage.haskell.org/package/RBTree
使用insert
函数:
insert :: (a -> a -> Ordering) -> RBTree a -> a -> RBTree a
为其提供(\_ _ -> LT)
功能,然后您可以随时将新元素放入最左侧的位置。