我正在尝试验证一个二叉树是否为红黑树。需要检查的一些属性包括:
如何检查从根到
我将我的树定义为:
- 根节点为黑色
- 不能有连续的红色节点。
- 您需要添加空节点作为叶子节点,其颜色取为黑色。
- 从叶子到根的每条路径上包含相同数量的黑节点
如何检查从根到
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