leetcode 437. 路径总和 III

给定一个二叉树,它的每个结点都存放着一个整数值。

找出路径和等于给定数值的路径总数。

路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。

示例:

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

10
/ \
5 -3
/ \ \
3 2 11
/ \ \
3 -2 1

返回 3。和等于 8 的路径有:

1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

前序遍历二叉树,
1:遇到null节点,则返回;
2:遇到节点则添加到list中;
3:遍历list,从后往前遍历,求和,若和=targetSum,则记录+1。因为有负数的存在,所以不能跳出循环;
4:递归,左右节点;
5:list的元素删除,以免影响接下来的计算;

    int count = 0;
    public int pathSum(TreeNode root, int targetSum) {
        if (root == null) {
            return 0;
        }
        List<Integer> list = new ArrayList<>();
        find3(root, targetSum, list);
        return count;
    }
    public void find3(TreeNode root, int targetSum, List<Integer> list) {
        if (root == null) {
            return;
        }
        list.add(root.val);
        int size = list.size() - 1;
        int sum = 0;
        for (int i = size; i >= 0; i--) {
            sum += list.get(i);
            if (sum == targetSum) {
                count++;
            }
        }
        find3(root.left, targetSum, list);
        find3(root.right, targetSum, list);
        list.remove(size);
    }

posted @ 2021-05-11 13:28  旺仔古李  阅读(38)  评论(0编辑  收藏  举报