0

我想将 2-3-4 树分解为小节点。

这些是我正在使用的类型:

        type ele = int 
        type color = Red|Black
        type ab = Vide | Node of ( ele * color * ab * ab *ab) 
        type ab234 = Vide
        |Node_1 of (ele * ab234* ab234)
        |Node_2 of(ele * ele * ab234 *ab234 *ab234) ``
        |Node_3 of(ele * ele * ele *ab234 * ab234* ab234 *ab234)

我的映射基于此:

2-3-4 树到双色

我需要帮助来完成我的转型。我尝试使用此功能,但它似乎不起作用,它确实分解了根,但它不会继续到分支:

    let rec eclat = function
    | Vide -> Vide 
    | Node_3(r,x,y,ag,mg,md,ad) -> eclat ( Node_1(x,(Node_1(r,ag,mg)),Node_1(y,md,ad)))
    | Node_2(r,x,ag,ml,ad) -> eclat(Node_1(r,(Node_1(x,ag,ml)),ad))
    | _ -> failwith("zebi") ;;
4

1 回答 1

1

如果我eclat按照您现在的方式输入您的功能,我会得到:

提示:如果这是一个递归定义,你应该在第 1 行添加 'rec' 关键字

所以这是一个问题。

我还注意到您更改abab234,但您没有更改类型内部的内部外观。所以ab234type 的内容都被定义为 type ab。这似乎不正确。

于 2021-04-24T02:47:41.293 回答