Java 我的递归条件计算二叉树高度正确吗?

Java 我的递归条件计算二叉树高度正确吗?,java,recursion,Java,Recursion,在您的帮助下,我试图知道我的代码是对是错,因为很遗憾,我无法运行它进行检查 没有编译错误。我想做的是找出二叉树的高度。当然,这棵树不必保持平衡 你认为递归条件正确吗?我的朋友声称它将始终返回0。乍一看,只要你通过树的头部,它将返回正确的值。但是构建一个测试来验证这一点应该很容易…在我看来很好,尽管我个人将最后一点更改为: return Math.max(heightLeft, heightRight) + 1; 我担心你根本无法运行它。。。为什么不能围绕这一点编写单元测试?我会对任何无法测试的

在您的帮助下,我试图知道我的代码是对是错,因为很遗憾,我无法运行它进行检查

没有编译错误。我想做的是找出二叉树的高度。当然,这棵树不必保持平衡


你认为递归条件正确吗?我的朋友声称它将始终返回0。

乍一看,只要你通过树的头部,它将返回正确的值。但是构建一个测试来验证这一点应该很容易…

在我看来很好,尽管我个人将最后一点更改为:

return Math.max(heightLeft, heightRight) + 1;

我担心你根本无法运行它。。。为什么不能围绕这一点编写单元测试?我会对任何无法测试的代码感到紧张:

非常紧凑的版本:

public int height(RBNode t) {
    if (t == null) {
        return 0;
    }
    return Math.max(height(t.left), height(t.right)) + 1;
}

在问题的代码中,我们不是得到高度+1吗?高度定义为“从根到树中最深节点的路径长度”。只有一个节点的有根树根的深度为零

如果有问题的代码将根赋予只有1个节点的树,那么它将给出高度为1,实际上应该是0


如果我在什么地方错了,请纠正我

小建议:你不应该混合代码风格。如果块上有花括号,则围绕一条线,否则不围绕一条线。其他的一切都会让你的代码的其他读者感到困惑。为什么你不能自己运行呢?你没有电脑可以用吗?如果不是,你是从哪里写的,为什么?@nfechner:absolute:Fixed。你可以进一步压缩代码,但这会使代码更难理解,不应该使用:return t==null?0:Math.maxheightt.left、heightt.right+1;是否应该是:如果t==null{return-1;}?单个节点的树是否只有根具有长度1或长度0是一个解释问题。有些人强烈认为前者是正确的,有些人认为后者是正确的。
public int height(RBNode t) {
    if (t == null) {
        return 0;
    }
    return Math.max(height(t.left), height(t.right)) + 1;
}