我正在尝试验证二叉树是否为红黑色树。 我需要检查的一些属性是:
不知何故,我的测试用例都通过了,但我确信我没有实现上面的数字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
答案 0 :(得分:3)
嗯,你需要保留一个柜台:
split
这样的事情应该有效。 (在我的回答中,最左边的路径被访问两次,第一次访问见证计数器,第二次因为我不想编写复杂的代码而不再访问它)