有没有办法在每次递归时创建一个唯一的变量?

时间:2015-05-08 08:12:54

标签: java recursion tree depth

是否有可能创建一个对该递归级别唯一的变量,这样无论发生什么变化都会保持这种方式,而不管其他所有递归步骤?这可以通过在递归完成后我可以在每个递归步骤中检索变量中的值来完成吗?

让我用一个例子来说明问题。让我们说我有一棵树。我想记录每个节点的深度级别,并对其进行组织,以便每个深度级别的所有节点都捆绑在同一个数组或列表中。所以我需要为每个深度级别提供不同的数组/列表。

我以递归方式遍历树。在每次递归开始时,我都会创建一个新列表。 它是同一行,所以每次递归都会创建一个具有相同名称的列表变量。我正在处理深度为X的节点。我将此节点添加到列表中,然后继续(递归)到深度为X + 1的子节点。我将此子节点添加到新列表。依此类推,直到树中的所有节点都属于某个列表。

递归完成后,我希望有一些列表等于树的高度(每个深度1个列表,包含该深度中的所有节点),以及一种访问所有节点的方法列表。

这可能吗?

7 个答案:

答案 0 :(得分:1)

将值存储在List中,将每个新值附加到列表中。列表中值的索引将是添加值的递归深度。

答案 1 :(得分:1)

您可能需要一个Map<Integer, List<?>>,其中键是深度,值是为该深度放置项目的列表。 Map是此处最常见的对象,因为它可用于深度优先或先呼吸搜索。

Map必须是递归方法签名的一部分,或者是可以从递归方法访问的实例变量。

答案 2 :(得分:1)

您不知道自己拥有多少级别,因此在此之前无法制作列表。但是你可以使用Map。例如Map<Integer,List<Node>>。将其传递给recurrsive函数并使用当前级别作为键。

最后,您将拥有如下地图:

1:节点列表

2:节点列表

...

答案 3 :(得分:1)

你可以保持local variable内部方法保持不变!

考虑 Factorial With Recursion

的基本示例
public int calculateFactorial(int number){ //User will call this method
    return factPreservingOriginalValue(number,number);
         |
         |
         -----> Internally you call a method to maintain original value
}

另一种方法

public int factPreservingOriginalValue(int orig,int number){ // orig will remain same
          if(number==0)
               return 1;
          return number*factWithTempVariable(orig,number-1);
}

您可以使用此orig value来了解遍历树时的任何时间点的深度

答案 4 :(得分:0)

在递归中,您不知道“递归级别”,但您可以轻松获得可用的地图Map<int, List<...>,例如作为递归的参数,您可以在其中存储每个级别的节点列表。

答案 5 :(得分:0)

您需要创建一组节点集合,然后,在将当前n深度节点添加到结构时,只需将其添加到第n个集合。 Here you can find more info on how to create an array of lists.

答案 6 :(得分:0)

您可以使用POJO:

  • 在递归开始时创建新的java bean对象
  • 存储您的唯一递归值
  • 在递归结束时将该对象添加到列表
  • 递归完成后根据需要处理列表