递归java返回一些树结构

时间:2014-03-15 00:17:24

标签: java recursion

    public Node search(int x)
    {
        if(this.isLeafNode()) {
            return this; 
        }
        else {
            int i = 0; 
            while(i < keys.size()) {
                if(keys.get(i) == x)
                    return this; 
                if(keys.get(i) > x)
                    return children.get(i).search(x);
                i++;
            }
            return children.get(i).search(x);
        }
    }

我想知道如果不是

会有所作为
return children.get(i).search(x);

我刚刚做了

children.get(i).search(x);

java如何以不同方式处理这些语句?我应该放弃所有递归调用的返回吗?

1 个答案:

答案 0 :(得分:0)

要回答您的问题,是的,如果您从return代码行中删除return children.get(i).search(x);语句,则会产生巨大影响。

方法签名:

public Node search(int x)

明确声明它将返回一个节点值,因此该方法的最终结果必须返回一个Node或null值。

&#34; java如何以不同方式处理这些语句?&#34;

方法调用:children.get(i).search(x);仅运行方法并继续。这仅在方法具有void返回类型时有效。由于您的方法返回一个值(在本例中为Node),您必须对值执行某些操作。

调用返回值的方法就像在某种意义上使用变量一样。

您不能只拥有一行代码:variableX;

你需要用它做点什么。在您的情况下,由于您的方法返回Node类型,因此在调用方法时,您必须对返回的值执行某些操作。

为了使这个算法有效,你需要从被调用的方法中获取值,并将其返回给调用方法。

使用视觉示例:

Search1&gt; Search2&gt; Search3

  • Search1调用Search2,
  • Search2调用Search3
  • Search3将节点返回到Search2
  • Search2将该节点返回到Search1

删除返回关键字只会给你错误,因为你会有一行代码变量而不用任何东西。

children.get(i).search(x);

将评估您必须使用的节点。