需要有关二叉树高度的帮助

时间:2013-03-25 05:16:23

标签: java

这是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

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

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等