我想要在树中的某个级别显示所有节点:
被称为:allNodesAtACertainLevel(0, *whatever level you want*, root);
这会产生正确答案。
private void allNodesAtACertainLevel(int count, int level, Node n){
count += 1;
if(count <= level){
if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count, level, n.right);
}
else{
System.out.print(n.value);
}
}
这不是。
private void allNodesAtACertainLevel(int count, int level, Node n){
if(count < level){
if(n.left != null) allNodesAtACertainLevel(count++, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count++, level, n.right);
}
else{
System.out.print(n.value);
}
}
有人可以解释原因吗?
答案 0 :(得分:6)
第二个示例增加count
两次,第一个示例仅增加count
一次。在调用count
之前,第一个增量为allNodesAtACertainLevel
,第二个示例调用allNodesAtACertainLevel
时增加count
,并在调用之后增加count++;
if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count, level, n.right);
。
如果适当替换第二个例子,其中任何一个都应产生正确的结果:
count += 1;
if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count, level, n.right);
-
if(n.left != null) allNodesAtACertainLevel(count+1, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count+1, level, n.right);
-
{{1}}
答案 1 :(得分:2)
你的问题是因为你正在计算++次数,所以你再增加一次水平计数器。
您应该将代码更改为以下内容:
count++;
if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count, level, n.right);