首页 > 解决方案 > 如何在列表中添加树的节点?

问题描述

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

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 [];;

这样对吗?

标签: treeocaml

解决方案


您可能想在计算完countpreeoverright 之后再计算一遍left。在左侧部分计算的本地绑定可能会有所帮助。就像是

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

推荐阅读