我想在不连接列表的情况下将树的节点按顺序添加到列表中。
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 [];;
对吗?
答案 0 :(得分:0)
您可能想在countpree
上计算right
之后计算left
。
在左侧部分对计算进行局部绑定可能会有所帮助。
| BT (left, v, right) ->
let leftpreoder = countpre left (v :: list)
in ...