这是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
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:2)
您偏爱右节点上的左侧节点。节点的高度应为:
MAX(height(left), height(right)) + 1
但相反,你有效地说:
if (left)
return height(left) + 1
else if (right)
return height(right) + 1
因此,如果一个节点有一条左腿短而一条长右翼,你的答案就会错误。
答案 1 :(得分:0)
因此任何非null给定树节点的高度应为
max( ( height of left sub tree) , (height of right sub tree)) + 1
如其他答案中所述,您的遍历不正确。
如果节点为null,则其高度为0.
类似地,任何非空节点的大小都是sizeof(左)+ sizeof(右)+1等