二进制搜索树,大小为7,高度为3

时间:2013-02-02 22:24:32

标签: ocaml

我正在构建一个大小为7和高度为3的二叉搜索树。我只需要对其进行硬编码,而不是通过函数生成它。

这是我硬编码的树

Node (Node (Node (Empty, 0, Empty), 1, 
Node (Empty, 3, Empty)), 5
Node (Empty, 7, Node (8, 9, Empty))))

我想要的是节点9有两个孩子(8和空)。但是,我继续在8上得到一个错误,上面写着“这个表达式有int类型但是表达式是int type tree”。我怎么能纠正这个?

谢谢!

2 个答案:

答案 0 :(得分:3)

你不能为叶子写8。你必须写Node (Empty, 8, Empty)

type tree = Empty | Node of tree * int * tree

(* the tree

           5
         /  \
        /    \
       1      7         
     /  \      \
    0    3      9
               /
              8
*)
let t =
  Node (
    Node (Node (Empty, 0, Empty),
          1, 
          Node (Empty, 3, Empty)),
    5,
    Node (
      Empty,
      7,
      Node (Node (Empty, 8, Empty),
            9,
            Empty)
    )
  )

(* With an auxliary function we can do this to get the same tree: *)

let leaf k = Node (Empty, k, Empty)

let t' =
  Node (
    Node (leaf 0, 1, leaf 3),
    5,
    Node (Empty, 7, Node (leaf 8, 9, Empty)))

答案 1 :(得分:2)

Node的第一个元素必须是树,而不是int

因此,您不能将8放在预期树的位置。或许,您的意思是Node (Empty, 8 Empty)而不是8