OCaml - 解析树中级别的节点

时间:2013-10-27 18:26:30

标签: tree ocaml

我想在要列出的级别上编写所有节点。

type 'a tree = T of 'a * 'a tree * 'a tree;;

 let at_level t lvl=
      let rec aux t k =
         match t with
        |Leaf -> []
        |T(x, l, r) -> if k = lvl then 
           (x::aux l (k+1)) @ (aux r (k+1))
        else 
        (aux l (k+1)) @( aux r (k+1))
      in aux t lvl;;

但我总是收到结果:[x]其中x是root的值。 我的计划中的问题在哪里?

1 个答案:

答案 0 :(得分:2)

问题是你应该在调用aux t lvl时调用aux t 0,否则你从一开始就总是有k = lvl(即在树的根部)。

另外,为什么在找到正确级别后拨打aux l (k+1)?之后k = lvl平等不可能是真的。

无论如何,这里是一些格式更改的代码:

type 'a tree = T of 'a * 'a tree * 'a tree | Leaf;;

let at_level tree lvl =                                       
  let rec aux t k = match t with                                
    |Leaf -> []                                                   
    |T(value, left, right) when k = lvl -> [value]                
    |T(value, left, right) -> (aux left (k+1)) @ (aux right (k+1))
  in aux tree 0;;


# let tree = T(5,T(6,Leaf,Leaf),T(7,Leaf,Leaf));;
# at_level tree 1;;
- : int list = [6; 7]