剑指Offer面试题34. 二叉树中和为某一值的路径(dfs)

题目
在这里插入图片描述
有很多坑 注意是叶子结点也就是走到二叉树底部
开始用linkedlist写的时间2ms
换了arraylist就1ms了
挺不解的 希望以后理解了回来阐述一下

class Solution {
    
    
    List<List<Integer>> res;
    int target;
    List<Integer> list;
    public List<List<Integer>> pathSum(TreeNode root, int target) {
    
    
        this.target = target;
        res = new ArrayList<>();
        if (root == null) return res;
        list = new ArrayList<>();
        list.add(root.val);
        dfs(list,root,1,root.val);
        return res;
    }
    private void dfs(List list, TreeNode node, int step,int sum){
    
    
        if (sum == target && node.left == null && node.right == null){
    
    
            res.add(new ArrayList<>(list));
            return;
        }
        if (node.left != null){
    
    
            list.add(node.left.val);
            dfs(list,node.left,step+1,sum+node.left.val);
            list.remove(step);
        }
        if (node.right != null){
    
    
            list.add(node.right.val);
            dfs(list,node.right,step+1,sum+node.right.val);
            list.remove(step);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43434328/article/details/115305272