public Node search_data_var2(Comparable searchable, Node T){
if(T.getInfo()==searchable){
return(T);
}
else{
if(T.getInfo()==null){
return null;
}
if(T.getInfo().compareTo(searchable)>0){
search_data_var2(searchable,T.getLeft());
}
if(T.getInfo().compareTo(searchable)<0){
search_data_var2(searchable,T.getRight());
}
}
}
我需要创建一个方法,找到一个具有特定值“searchable”的节点,并在包含它时返回节点“t”。如果这样的值不存在,函数应该返回“null”。我有麻烦,但不知道如何实现这个单一的方法。上面的函数就是我写的。问题是该方法不能以相同的方式返回node和null。
不禁止使用外部函数来实现这一点,但目前我还不知道如何实现这一点。
2条答案
按热度按时间jk9hmnmh1#
问题是该方法不能以相同的方式返回node和null。
是的,您可以,但是您需要调整您的代码以适应
返回将由
search_data_var2
递归方法调用。顺便说一句,你不应该使用T
作为变量名,通常这样的名称(即一个大写字母)用于泛型类型。而且==
你应该使用compareTo
方法(即。,T.getInfo().compareTo(searchable) == 0
).最后,您的代码可能会抛出
NPE
因为你是第一个检查的在实际检查是否
T.getInfo()
是null
或者如果T
是null
它自己。因此,您需要重新排列条件,如下所示:ltskdhd12#
出于查找目的,avl树与普通的二叉搜索树是相同的。
你的代码快到了!大多数情况下,你只需要添加
return
递归调用之前的关键字。以下是我还将做的一些其他更改:
按照 java 的惯例,
T
用于泛型类型。我会将节点重命名为更具描述性的名称(如node
).而不是检查引用的相等性(
==
),我将使用compareTo
方法,因为您正在使用compareTo
不管怎样。这允许您在没有引用的情况下找到所需的值。我会将null检查移到方法的顶部,以避免出现错误
NullPointerException
.