gpt4 book ai didi

java - 如何在二叉搜索树的查找操作中使用 return 关键字

转载 作者:行者123 更新时间:2023-11-30 03:53:18 25 4
gpt4 key购买 nike

这是我查找二叉树中是否存在特定节点的方法。这是我的方法,它工作正常。

public boolean find(BinaryNode p,int x){
if(p==null){
return false ;
}
else{
if(x==p.element){
return true;

}
else if(x<p.element){
return find(p.left,x);
}
else {
return find(p.right,x);
}
}


}

我的问题是我是否不在else if(x<p.element){内插入返回关键字else {我收到错误,因为缺少返回语句。
假设我有一个由元素 5,4,6,60,25,10 组成的二叉树。
因此,如果我要搜索 10 个,则有时会出现

if(x==p.element){
return true;

由于递归调用而满足。然后找到一个return语句。
如果我正在搜索一个不在树中的元素,最终我会到达语句

if(p==null){
return false ;
}
,我们在那里找到一个 return 语句。

因此,即使我在 else ifelse 子句中没有 return,但不知何故,我最终还是到达了 return 语句,对吗?那么不这样做有什么问题吗? else if 和 else 子句中包含 return 关键字。
为什么我必须把它放在那里?
为什么我不能这样做

`public boolean find(BinaryNode p,int x){
if(p==null){
return false ;
}
else{
if(x==p.element){
return true;

}
else if(x<p.element){
find(p.left,x);
}
else {
find(p.right,x);
}
}


}`

最佳答案

最接近您希望 if-else if-else 子句的行为方式是使用 ?条件表达式:

public boolean find(BinaryNode p,int x)    
{
if(p==null) {
return false ;
}
else {
return (x==p.element)?true:(x<p.element?find(p.left,x):find(p.right,x));
}
}

其他选项是将要返回的值存储在局部变量中,并仅在方法末尾返回它:

public boolean find(BinaryNode p,int x)
{
boolean returnValue = false;
if(p!=null)
{
if(x==p.element){
returnValue = true;

}
else if(x<p.element){
returnValue = find(p.left,x);
}
else {
returnValue = find(p.right,x);
}
}
return returnValue;
}

我最喜欢的方法是使用逻辑表达式的短路求值:

public boolean find(BinaryNode p,int x)
{
if(p==null) return false;
return x==p.element || (x<p.element && find(p.left,x)) || find(p.right,x);
}

自 Java 以来 ||&&当左侧部分已经确定其结果时,运算符不会计算其右侧部分表达式。如果x==p.elementtrue ,然后true将返回而不评估该行的其余部分。如果没有,则(x<p.element && find(p.left,x))将按照相同的规则进行评估。注意如何find(p.left,x)x<p.element时不会被评估是假的。

关于java - 如何在二叉搜索树的查找操作中使用 return 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23854328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com