0

欢迎!我有一个名为 less 的递归公共静态方法,它接受一个树节点(原始二叉树,而不是真正的搜索树)和一个 int 参数,如果树中的所有值都小于整数,则返回该参数。所以,我会使用一个public class TN { public int value; public TN left, right; public TN(int v, TN l, TN r) {value = v; left = l; right = r;} } 所以,我的方法看起来像这样:

public static boolean less(TN s, int toFind){
if (s == null)
   return true;
else{ 
 if(s.value <= toFind)  
   return less(s.left, toFind) && less(s.right, toFind);  // right here do I return true? or do I have to somehow recall recursively
 else  
   return false; 
}

我想知道这是对的还是我错过了什么???我必须返回真假吗?

4

4 回答 4

2

有更优雅的面向对象的方式来编写它。我的建议是创建类less()的非静态成员函数TN。这样,如果树的根节点被调用root,你只需调用root.less(). 然后每次调用less()都会调用left.less()and right.less()

由于您发布了甚至无法编译的示例代码,我想知道您是否正在使用 IDE,或者甚至尝试使用javac. 如果您是 Java 新手,我强烈建议您使用 Eclipse、Netbeans 或其他 IDE。

于 2009-10-16T18:56:24.670 回答
1
return less(s, toFind); 

应该:

return less(s.left, toFind) && less(s.right, toFind);

我不知道为什么函数是静态的。

如前所述,您的第一部分应该是:

if (s == null) return true;

(编辑:当所有节点都满足条件时,这会让你得到一个真实的结果。你有一个==,应该是一个<)。编辑:好的,除了我提到的那些,你还有很多问题。您需要在逻辑上单步执行您的代码。

你需要遍历你的树,所以你需要在你的子节点上调用你的函数。接下来,您需要返回 true 作为默认结果。这样,当你达到一个大于你正在寻找的数字时,你可以立即返回 false 而无需遍历任何孩子。我希望我已经在逻辑上为您提供了足够的帮助,以便您自己完成其余部分。

于 2009-10-16T18:52:48.413 回答
0

首先,if (s = null)应该在if (s == null)您进行比较时,而不是设置sto的值null

该语句return less(null, toFind);不断调用您的方法-您将溢出堆栈。

于 2009-10-16T18:50:53.230 回答
0

请注意,您的函数是如何无法返回true的,因为每次终止递归时,您都在返回false?问题出在您的第一次检查中。您说“树中的所有值都小于整数”。好吧,在一棵空树中,所有值(其中没有)确实小于任何整数,所以true在这种情况下你应该返回。

此外,当您说“小于”时,您是在比较相等性,因此您实际上是在检查所有值是否都等于整数,而不是小于它。

于 2009-10-16T19:02:42.447 回答