F# 如何展平二叉搜索树
F# How to Flatten a Binary Search Tree
我有一棵树,结构如下:
type 'a Tree =| Leaf of 'a| Branch of 'a Tree * 'a Tree
我正在对我的树使用连续传递样式的尾递归并试图将其展平。
let rec loop tree k acc =
match tree with
| Leaf v -> v :: acc
| Branch (tl,tr) -> loop tl (loop tr k) acc
loop xs id []
(Branch (Branch (Leaf 1.0,Leaf 2.0),Branch (Leaf 3.0,Leaf 4.0)))
这个returns只有[1.0]
然而,我只得到树中的第一片叶子,我的函数不适用于整棵树。我怎样才能做到这一点?
您正在传递一个延续,但您没有在任何地方调用它。试试这个:
let rec loop tree k acc =
match tree with
| Leaf v -> k (v :: acc)
| Branch (tl,tr) -> loop tl (loop tr k) acc
然后 loop xs id []
产生 [4.0; 3.0; 2.0; 1.0]
.
我有一棵树,结构如下:
type 'a Tree =| Leaf of 'a| Branch of 'a Tree * 'a Tree
我正在对我的树使用连续传递样式的尾递归并试图将其展平。
let rec loop tree k acc =
match tree with
| Leaf v -> v :: acc
| Branch (tl,tr) -> loop tl (loop tr k) acc
loop xs id []
(Branch (Branch (Leaf 1.0,Leaf 2.0),Branch (Leaf 3.0,Leaf 4.0)))
这个returns只有[1.0]
然而,我只得到树中的第一片叶子,我的函数不适用于整棵树。我怎样才能做到这一点?
您正在传递一个延续,但您没有在任何地方调用它。试试这个:
let rec loop tree k acc =
match tree with
| Leaf v -> k (v :: acc)
| Branch (tl,tr) -> loop tl (loop tr k) acc
然后 loop xs id []
产生 [4.0; 3.0; 2.0; 1.0]
.