如何在列表中添加树的节点?

时间:2018-11-12 09:10:46

标签: tree ocaml

我想在不连接列表的情况下将树的节点按顺序添加到列表中。

type 'a bintree = Nil | BT of 'a bintree * 'a * 'a bintree
let preorder t = 
    let rec addpre t list = 
        match t with
        | Nil -> list
        | BT (left, v, right) -> addpre left (v :: list)
    in addpre t [];;

let ab = BT (BT(Nil, 2, Nil),
             7,
             BT(BT(Nil, 5, Nil), 6, BT(Nil, 11, Nil)))
let r = preorder ab;;

如您所见,我知道如何从一个分支(左侧或右侧)添加节点,但是我不知道如何从两个分支添加节点。你能帮我吗?

更新

我想我做到了

let preorder t = let rec addpre t list = 
                         match t with
                                    | Nil -> list
                                    | BT (left, v, right) -> v :: addpre left (addpre right list)
                 in addpre t [];;

对吗?

1 个答案:

答案 0 :(得分:0)

您可能想在countpree上计算right之后计算left。 在左侧部分对计算进行局部绑定可能会有所帮助。

| BT (left, v, right) -> 
      let leftpreoder = countpre left (v :: list) 
      in ...