实现Java树方法

实现Java树方法,java,Java,我必须为二叉树实现递归方法,我想看看我编写的方法是否正确实现,因为我无法测试它们。这些都不是实际的方法。我只需要编写算法的伪代码 a) 计算树中的节点数 countNodes(TreeNode root){ if(root == null) return 0; else{ TreeNode left = root.getLeftChild(); TreeNode right = root.getRightChild();

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

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)
    }
}

你的MaxElm方法是错误的。如果所有元素都有负值,则它将不起作用

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

您可以测试它们

用Java编写它们作为真实代码,编写一些单元测试,运行它们

如果你必须在一天结束时提交的东西是伪代码而不是真正的代码,那么你可以手动将Java翻译回伪代码



严格来说,除非您指定了伪代码语言的含义,否则无法判断伪代码是否正确。

有几个小问题:

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


对于其他人来说,这似乎很好:)

你有具体的问题吗?如果不是,你的问题可能会得到更好的回答。从这个伪代码中,创建真正的代码应该不会太难。这些伪代码中的大部分将按原样工作,或者只需稍加修改。然后您可以使用单元测试或与标准库进行比较。元素应该是正整数。除了你认为上面的代码实现正确之外?