我的递归条件是否适合计算二叉树高度?

时间:2011-04-23 11:18:40

标签: java recursion

我试图在你的帮助下知道我的代码是对还是错,因为遗憾的是我无法检查它。

没有编译错误。我要做的是找到二叉树的高度。当然,树不必平衡。

Each node in Binary tree can have two nodes as children

public int height(RBNode t) {
  if (t == null)
  return 0;

  int heightLeft = height(t.left);
  int heightRight = height(t.right);

  if (heightLeft > heightRight) {
    return heightLeft + 1;
  } else {
    return (heightRight + 1);
  }
}

你认为递归条件是对的吗?我的朋友声称它总会返回0。

4 个答案:

答案 0 :(得分:5)

对我来说很好看,虽然我个人将最后一点改为:

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

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

答案 1 :(得分:5)

非常紧凑的版本:

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

答案 2 :(得分:0)

乍一看,只要你传入树的头部,它就会返回正确的值。但是应该很容易构建一个测试来验证这个......

答案 3 :(得分:0)

在问题的代码中,我们没有得到高度+1吗?高度定义为从树中根到最深节点的路径长度。只有一个节点(根)的(带根)树的深度为零。'(维基百科)

如果在问题的代码中,如果将根提供给只有1个节点的树,则将高度设为1,这应该是0 ..

如果我错了,请纠正我..