Path Sum II 计算节点和符合条件的路径

来源:互联网 发布:淘宝网分类 编辑:程序博客网 时间:2024/06/05 22:31

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:
Given the below binary tree and sum = 22,
              5             / \            4   8           /   / \          11  13  4         /  \    / \        7    2  5   1

return

[   [5,4,11,2],   [5,8,4,5]]

跟前面的Path Sum 问题类似。之前是判断是否存在这样的路径。现在是要求将所有这样的路径找出来。

典型的深度优先遍历搜索问题。

控制的条件跟之前一样,额外增加存储路径步骤。

运行时间

代码:

public class PathSumII {    public List<List<Integer>> pathSum(TreeNode root, int sum) {        List<List<Integer>> store = new ArrayList<>();        if (root == null) {            return store;        }        doPathSum(store, new ArrayList<>(), root, sum);        return store;    }    private void doPathSum(List<List<Integer>> store, List<Integer> curList, TreeNode root, int sum) {        if (root.left == null && root.right == null) {            if (root.val != sum) {                return;            }            List<Integer> temp = new ArrayList<>(curList);            temp.add(root.val);            store.add(temp);            return;        }        curList.add(root.val);        if (root.left != null) {            doPathSum(store, curList, root.left, sum - root.val);        }        if (root.right != null) {            doPathSum(store, curList, root.right, sum - root.val);        }        curList.remove(curList.size() - 1);    }}


1 0
原创粉丝点击