【发布时间】:2011-06-05 23:10:17
【问题描述】:
虽然我仍在努力为this 问题找到解决方案,但我还有另一个可能更容易的解决方案。下面是冈崎红黑树实现的插入函数。我想要做的是在我插入树时保持数据未排序。因此,每次插入时,数据总是会转到最左边/最底部的叶子。无需比较 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)
【问题讨论】:
-
如果树中的数据是未排序的,那么这棵树就不再是二叉搜索树了。您如何确定一个元素是否已经在树中(无需遍历所有元素)?如果您不想对数据进行排序,那么您可能不想要红黑树。
-
红黑树适用于 BST,但我想我们可以有一个未排序的二叉树,在这里我想使用相同的 RB 树概念来保持平衡.. 应该有办法保持未排序的二叉树平衡?
-
当然,平衡的棘手之处在于保持元素排序。如果您不关心树中元素的顺序,您可以随意平衡它。
-
我和 Cedric 有同样的困惑,但问题是关于使用红黑树实现一个序列(不一定是排序的)。
标签: algorithm haskell red-black-tree