标准ML:修改二叉树的深度函数

时间:2015-08-12 19:54:33

标签: functional-programming sml

我给了二叉树的深度函数,如下所示:

fun depth Empty = 0
    | depth(Node(t_1, _ t_2)) = max(depth t_1, depth t_2) + 1;

假设我想要修改此深度函数,使得单个节点的深度为0(实际上,单个节点的深度为1)。我该怎么做呢?

我在想:

fun depth Empty = 0
    | depth(Node(Empty, _, Empty)) = 0
    | depth(Node(t_1, _, t_2)) = max(depth t_1, depth t_2) + 1;

这看起来不错吗?

谢谢,

bclayman

1 个答案:

答案 0 :(得分:1)

这很接近,但并不完全正确。 depth(Node(Node(Empty,1,Empty),2,Empty)将在左子树上递归,该子树是单个节点,因此它将返回0。然后它将在右边递归,这是空的,返回0.然后你将取最大0和0,返回1,这可能不是你想要的。相反,您必须匹配空案例和单例大小写,并且对于默认情况,您将需要调用原始版本,对于单个节点返回1。