2013-02-02 32 views
0

我正在構建一個大小爲7和高度爲3的二叉搜索樹。我只需要對它進行硬編碼,而不是通過函數生成它。二進制搜索樹大小爲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樹」。我該如何解決這個問題?

謝謝!

回答

2

節點的第一個元素必須是樹,而不是其他類似int

因此,你不能把8放在樹木預計的地方。可能你的意思是有Node (Empty, 8 Empty)而不是8

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)))