让我们说:
datatype bin_tree = Empty |
Node of value * bin_tree * bin_tree
我如何填写二叉树(不是二进制搜索树,左边小于根,右边更大)。只是在二叉树中每个节点插入的列表中的值。
答案 0 :(得分:4)
您使用已声明的值构造函数。
如果我们暂时假定value
是int
,那么我们就会知道树
1
/ \
2 4
/
3
表示为:
Node (1,
Node (2,
Node (3, Empty, Empty),
Empty
),
Node (4, Empty, Empty)
)
或者,相当于一行:
Node (1, Node (2, Node (3, Empty, Empty), Empty), Node (4, Empty, Empty))
答案 1 :(得分:1)
如果不了解您如何从给定列表中构建树,那么实际上无法帮助您。但是,这是一个创建平衡树的示例。它接受第一个元素并将其用作节点值,然后将列表的其余部分拆分为两个大小相等的子列表(如果可能),方法是将“left”列表中的所有“even”元素和所有“ “右”列表中的奇数“元素:
datatype 'a bin_tree = Empty
| Node of 'a * 'a bin_tree * 'a bin_tree
fun list_split xs =
let
fun loop [] (left, right) = (rev left, rev right)
| loop (x::y::xs) (left, right) = loop xs (x :: left, y :: right)
| loop (x :: xs) (left, right) = loop xs (x :: left, right)
in
loop xs ([], [])
end
fun built_tree [] = Empty
| built_tree (x :: xs) =
let
val (left, right) = list_split xs
val left_tree = built_tree left
val right_tree = built_tree right
in
Node (x, left_tree, right_tree)
end
结果:
- built_tree [1,2,3,4,5,6,7,8,9];
val it =
Node
(1,Node (2,Node (4,Node (8,Empty,Empty),Empty),Node (6,Empty,Empty)),
Node (3,Node (5,Node (9,Empty,Empty),Empty),Node (7,Empty,Empty)))
: int bin_tree
答案 2 :(得分:-2)
Here is an answer用Java完成的同样问题。这可能会有所帮助:)。