Java二进制InOrder树遍历--为什么这个在函数外初始化ArrayList会有区别?

问题描述 投票:0回答:1

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

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<>();

谁能给我解释一下为什么这有什么不同,为什么最初会失败?

java tree binary-tree traversal inorder
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.