gpt4 book ai didi

java - 递归时如何将值存储到数组中?

转载 作者:行者123 更新时间:2023-12-01 09:27:17 25 4
gpt4 key购买 nike

例如,在该方法中,该方法构建了一个从 BST 排序的数组

public E[] inOrderSort(TreeNode tree){
E[] array1 = new E[tree.size];
inOrder(tree, array1, 0);
return array1;
}

public void inOrder(TreeNode node, E[] array, int index){
if(node == null){
return;
}
inOrder(node.getLeft(), array, index);
array[index++]= node.getData();
inOrder(node.getRight(), array, index);
}

这里,当 inOrderSort 方法返回 array1 时,如何获得正确的结果? Java 如何将 inOrderSort 方法中声明的 array1 传递给 inOrder 方法才能按中序排序填充 array1 的值?我以为Java是按引用传递而不是按值传递?

最佳答案

原始值是按值传递的。因此,对 inOrder 中的 index 变量执行的任何操作都不会在调用方中产生影响。该数组不是基元,而是通过引用传递的,因此,对其进行的任何修改对于调用者来说都是可见的。

现在您有两个选择:

  • 将索引位置包装在对象中(不是 Integer 因为它是不可变的,AtomicInteger 就可以,与 int 相同[] 与一个元素) - 但我不会这样做,因为该方法的目的是将排序应用于数组而不是更新索引。索引只不过是排序功能的一个提示。
  • 返回新索引作为结果并在以下调用中使用它(我更喜欢这个)

例如:

public int inOrder(TreeNode node, E[] array, int start){
if(node == null){
return;
}
int index = inOrder(node.getLeft(), array, start);
array[index++]= node.getData();
return inOrder(node.getRight(), array, index);
}

关于java - 递归时如何将值存储到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39739010/

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