繁体   English   中英

Java递归二叉树

[英]Java recursive binary tree

欢迎! 我有一个名为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 class TN { public int value; public TN left, right; public TN(int v, TN l, TN r) {value = v; left = l; right = r;} } 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; 
}

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

有很多优雅的,OO方法来编写此代码。 我的建议是使less()成为TN类的非静态成员函数。 这样,如果树的根节点称为root ,则只需调用root.less() 每次对less()调用都会调用left.less()right.less()

由于您发布的示例代码甚至无法编译,所以我想知道您是使用IDE还是尝试使用javac编译类。 如果您不熟悉Java,我强烈建议您使用Eclipse,Netbeans或其他IDE。

return less(s, toFind); 

应该:

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

我不知道为什么该功能是静态的。

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

if (s == null) return true;

(编辑:当所有节点都满足条件时,这将使您获得真实的结果。其中有==,应为<)。 编辑:好的,除了我提到的问题之外,您还有很多问题。 您需要在逻辑上逐步执行代码。

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

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

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

请注意,您的函数不可能永远返回true因为每次终止递归时,您都将返回false 问题出在您的第一次检查中。 您说“树中的所有值都小于整数”。 嗯,在一棵空树中,所有值(没有值)确实小于任何整数,因此在这种情况下,您应该返回true

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM