我必须为二叉树实现递归方法,并想看看我写的方法是否正确实现,因为我无法测试它们。这些不是实际的方法。我只需要编写算法的伪代码。
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)
}
}
答案 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转换回伪代码...
严格地说,你不能说伪代码是否正确,除非你已经指定了伪代码语言是什么意思。