验证一棵红黑树

时间:2018-04-30 16:00:19

标签: data-structures ocaml red-black-tree

我正在尝试验证二叉树是否为红黑色树。 我需要检查的一些属性是:

  1. Root is black
  2. 不能有2个连续的红色节点。
  3. 您需要将空节点添加为叶节点,其颜色将被视为黑色。
  4. 从叶子到根的每条路径都包含相同数量的黑色节点
  5. 不知何故,我的测试用例都通过了,但我确信我没有实现上面的数字4。

    如何检查从根到Empty(结尾)的深度是否具有相同数量的黑色节点?

    我将我的树定义为:

    type 'a tree = Empty | T of color * 'a tree * 'a * 'a tree 
    

    我的代码只是将当前树与一些不良案例匹配并返回false。否则,在左右分支上调用递归函数。

    let rec good_RB t = match t with
       | Empty -> true
       | T (R, T (R, _, _, _), _, _)
       | T (R , _, _, T (R, _, _, _)
         -> false
       | T (_, lft, _, rgt) -> good_RB lft && good_RB rgt
    

1 个答案:

答案 0 :(得分:3)

嗯,你需要保留一个柜台:

split

这样的事情应该有效。 (在我的回答中,最左边的路径被访问两次,第一次访问见证计数器,第二次因为我不想编写复杂的代码而不再访问它)