gpt4 book ai didi

Java 二元有序树遍历 - 为什么在函数外部初始化 ArrayList 会产生影响?

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

我编写了一个递归函数,将二叉树的所有节点添加到整数类型列表中,但由于某种原因,它一直给我带来问题。这就是我的代码最初的样子:

public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
helper(root, res);
return res;
}

public void helper(TreeNode root, List<Integer> res){
if(root == null){
return;
}
inorderTraversal(root.left);
res.add(root.val);
inorderTraversal(root.right);
}

但是它一直失败并且没有给我适当的解决方案。但事实证明,如果将“inorderTraversal”函数的第一行取出并使其全局化,则此代码可以工作:

List<Integer> res = new ArrayList<>();

有人可以向我解释为什么这会产生影响以及为什么它最初会失败吗?

最佳答案

因为您递归地调用“inorderTraversal”,所以每次调用该方法时,它都会覆盖“res”并创建一个新对象。因此,“res”必须是全局的,以防止发生这种覆盖。

关于Java 二元有序树遍历 - 为什么在函数外部初始化 ArrayList 会产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59689230/

25 4 0