为什么我的inorder遍历未能添加到ArrayList,但成功打印正确的值



给定一棵二叉树,返回其节点值的顺序遍历。

例如

:给定二叉树[1,null,2,3],12/3.返回(1、3、2).

下面是我的代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();
        helper(root, list);
        return list;
    }
    public void helper(TreeNode root, List<Integer> list){
        if (root == null){
            return;
        }
        if(root.left == null){
            System.out.println(root.val);
            list.add(root.val);
            inorderTraversal(root.right);
        }else{
            inorderTraversal(root.left);
            System.out.println(root.val);
            list.add(root.val);
            if (root.right != null){
                inorderTraversal(root.right);
            }
        }
    }
}

Print函数给出1,3,2,这是正确的,但是列表只返回[1]

因为你在每个inorderTraversal函数中都声明了新的ArrayList。

helper呼叫inorderTraversal时,您正在失去list。替换

inorderTraversal(node);

helper(node, list);

list.addAll(inorderTraversal(node));

你的方法也包含冗余复杂性,你可以直接写:

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

这是因为在helper中您正在调用实例化

inorderTraversal
List<Integer> list = new ArrayList<Integer>();

这似乎是一种奇怪的方式来做递归,但无论如何将helper中的list传递给inorderTraversal

最新更新