Recursion 求二叉树的最小高度

Recursion 求二叉树的最小高度,recursion,height,binary-tree,Recursion,Height,Binary Tree,请先阅读我的问题,然后再重复报告。在文献中,要找到树的最小高度,常用的方法如下: int minDepth(TreeNode root) { if (root == null) { return 0;} return 1 + Math.min(minDepth(root.left), minDepth(root.right)); } 但是,我认为它不能区分叶子和只有一个子节点的节点,因此它返回了一个错误的值。例如,如果我们的树如下所示: A是根 B是A的左撇子 C是B的

请先阅读我的问题,然后再重复报告。在文献中,要找到树的最小高度,常用的方法如下:

int minDepth(TreeNode root) {
    if (root == null) { return 0;}
        return 1 + Math.min(minDepth(root.left), minDepth(root.right));
}
但是,我认为它不能区分叶子和只有一个子节点的节点,因此它返回了一个错误的值。例如,如果我们的树如下所示:

A是根

B是A的左撇子

C是B的正确孩子

M是C的左子代

当叶子离根3跳时,此函数返回1,因此最小高度为4

由于文献中普遍建议使用这种递归版本,我认为我遗漏了一些东西


有人能帮我澄清一下吗?

您的评论表明,您发现这一点的文本实际上使用了与我使用的术语相同的定义。如果情况确实如此,那么问题不在于你所展示的算法为什么是正确的——在那些条件下它只是错误的


就拿第三个最简单的二叉树来说,它由两个节点组成。它只有一片叶子,它的深度是两片,最小的深度也是两片。但是您引用的算法返回值1。因此,除非作者对其中一个术语使用不同的定义(例如,“最小高度”表示“树外最短路径”/“到空指针的最短路径”),否则结果完全是错误的。

我猜“文献”使用了二叉树的定义,其中每个非叶节点正好有两个子节点。顺便说一下,我认为你的例子可以缩短为两个节点A和B。在二叉树中,一个节点有0个、一个或两个子节点。对于这个定义,我看到了minHeight的递归函数。那么“Minimum height”的定义是什么?树中根和叶之间的最短距离(路径)。用我所知道的“叶”的定义那是错误的,是的。有人能告诉我一个算法,它将返回4而不是1…如果一个二叉树的输入如下:100,50,70,60??