实现Java树方法

时间:2013-04-01 01:17:05

标签: java

我必须为二叉树实现递归方法,并想看看我写的方法是否正确实现,因为我无法测试它们。这些不是实际的方法。我只需要编写算法的伪代码。

a)计算树中节点的数量

countNodes(TreeNode root){
    if(root == null)
        return 0;
    else{
        TreeNode left = root.getLeftChild();
        TreeNode right = root.getRightChild();
        return (countNodes(left)+countNodes(right)) + 1;
    }
}

b)计算树的高度

height(TreeNode root){
    if(root == null)
        return 0;
    else{
        return Math.max(height(root.getLeftChild()), height(root.getRightChild()) +1;
    }
}

c)找出最大元素

maxElem(TreeNode root){
    if(root == null)
        return 0;
    else{
        int temp = 0;
        temp = Math.max(maxElem(root.getLeftChild()), maxElem(root.getRightChild()));
        return Math.max(root.getValue, temp);
    }
}

d)找出元素的总和

sum(TreeNode root){
    if(root == null)
        return 0;
    else{
        return (sum(root.getLeftChild()) + sum(root.getRightChild())) + root.getValue();
    }
}

e)找出元素的平均值

average(TreeNode root){
    int sum = sum(root);
    int elems = countNodes(root);
    return sum/elems;
}

f)查找特定项目

search(int i, TreeNode root){
    if(root == null)
        return false;
    else if(root.getValue == i)
        return true;
    else{ 
        search(i, root.getLeftChild);
        search(i, root.getRightChild);
    }
}

g)确定某个项目是否是另一个项目的祖先

isAncestor(TreeNode p, NodeNode c){
    if(p==null)
        return false;
    else
        return (c in p.getLeftChild() || c in p.getRightChild())
}

h)确定最高级别

maxFull(TreeNode root)
    if(root == null)
        return 0;
    else{
        return(numNodes in level h == 2^h - 1)
    }
}

3 个答案:

答案 0 :(得分:2)

你的MaxElm方法错了。如果所有元素都具有负值,它将无法工作。

答案 1 :(得分:1)

有几个小问题:

1)asMTilsted建议,如果您的树只包含负值,则maxElem不起作用 2)平均值可能不正确,因为这是一个int而不是double,尝试对树元素的总和计数进行类型转换,然后返回它们的商。
3)在函数搜索中,你不会在最后一个else语句中返回任何内容。尝试:return search(i, root.getLeftChild()) || search(i, root.getRightChild());(在代码的其余部分中,这些是功能而不是属性......

其余的看起来很好:)

答案 2 :(得分:0)

  

我必须为二叉树实现递归方法,并想看看我写的方法是否正确实现,因为我无法测试它们。这些不是实际的方法。我只需要编写算法的伪代码。

可以测试它们。

将它们写成(例如)Java中的真实代码,编写一些单元测试,运行它们。

如果您在一天结束时提交的内容是伪代码而非真实代码,那么您可以手动将Java转换回伪代码...


严格地说,你不能说伪代码是否正确,除非你已经指定了伪代码语言是什么意思。