这是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
因此,如果节点的左腿短而右腿长,那么您将得到错误的答案。