Java 如何在二叉搜索树的查找操作中使用return关键字
这是我发现二叉树中是否存在特定节点的方法。这是我的方法,它运行良好Java 如何在二叉搜索树的查找操作中使用return关键字,java,recursion,data-structures,return,binary-tree,Java,Recursion,Data Structures,Return,Binary Tree,这是我发现二叉树中是否存在特定节点的方法。这是我的方法,它运行良好 public boolean find(BinaryNode p,int x){ if(p==null){ return false ; } else{ if(x==p.element){ return true; } else if(x<p.ele
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);
}
}
}
由于递归调用而满足。然后将找到返回语句。如果我在搜索一个不在树中的元素,最终我会找到这个语句
if(p==null){
返回false;
}
,我们在那里找到一条返回语句
因此,即使我在else-if和else子句中也没有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);
}
}
}`
公共布尔查找(二进制节点p,int x){
if(p==null){
返回false;
}
否则{
if(x==p.element){
返回true;
}
else if(x)
因此,即使我在else-if和else子句中也没有返回,不知怎的,我最终还是得到了一个返回语句,对吗
没有编译器不知道它。编译器不知道在运行时x和p的值是多少
编译器只需检查return语句的所有可能性,并且必须有方法的退出点
您需要提供在二叉树的右方向或左方向移动的逻辑
最后两个else if不负责实际返回find方法的结果,它只用于沿着树的正确方向移动。find方法的最终结果将由前两个if else子句得出。您需要return语句,因为else if-else语句中的find函数将返回到完成后调用方,但第一个调用函数仍必须向调用方返回一个值最接近您希望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));
}
}
公共布尔查找(二进制节点p,int x)
{
如果(p==null){
返回false;
}
否则{
return(x==p.element)?true:(xHuh?如果调用find(p.left,x);
时不返回任何内容,则不会返回任何内容。没有“最终到达返回语句”对于非void函数。如果你不告诉它,你认为它会返回什么?要理解为什么需要return
s,请在纸上画一个调用树。如果你画了一个例子,其中有3个调用最终到达了末尾,你会看到由于没有向调用树发送结果,信息是如何丢失的。简言之:这是第一个需要重新调用的调用rn,不是最后一个,这是通过自下而上传播返回值来实现的。这是相同的方法。将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);
}