这是12年级二叉树分配中的一个问题。它想要BTree类的方法返回树的高度。我假设当树上有一个节点时,高度为0,对此不确定,我今天问我的老师。

但是无论如何,这是我的代码,我不知道它怎么了。

public int height(){
    if(root == null){
        return -1;
    }
    return height(root, 0, 0);
}
public int height(BNode branch, int depth, int ans){
    if(depth>ans){
        ans=depth;
    }
    if(branch.getLeft()!=null){
        depth+=1;
        return height(branch.getLeft(), depth, ans);
    }
    else if(branch.getRight()!=null){
        depth+=1;
        return height(branch.getRight(), depth, ans);
    }
    return ans;
}


这是测试类:

    BTree bTree = new BTree();
    bTree.add(50);
    bTree.add(60);
    bTree.add(40);
    bTree.add(35);
    bTree.add(55);
    bTree.add(45);
    bTree.add(51);
    bTree.display();
    System.out.println(bTree.height());


这棵树的高度应为3,但返回值:35
40
45
50
51
55
60
2

任何帮助,将不胜感激,谢谢。

最佳答案

您优先选择左节点而不是右节点。节点的高度应为:

MAX(height(left), height(right)) + 1


但是实际上,您实际上是在说:

if (left)
   return height(left) + 1
else if (right)
   return height(right) + 1


因此,如果节点的左腿短而右腿长,那么您将得到错误的答案。

10-08 19:26