【LeetCode】Path Sum II

来源:互联网 发布:实验数据记录怎么写 编辑:程序博客网 时间:2024/04/30 19:10

题目

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,用递归求解,注意要保存不同路径的值。代码如下:

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<List<Integer>> pathSum(TreeNode root, int sum) {        List<List<Integer>> list=new ArrayList<List<Integer>>();        if(root==null){            return list;        }        List<Integer> item=new ArrayList<Integer>();        item.add(root.val);        getSumRec(root,sum-root.val,item,list);        return list;    }    private void getSumRec(TreeNode root,int sum,List<Integer> item,List<List<Integer>> list){        if(root==null){            return;        }        if(root.left==null&&root.right==null&&sum==0){   //到达叶子节点,并且和等于目标值时,add进list            list.add(new ArrayList<Integer>(item));            return;        }        if(root.left!=null){            item.add(root.left.val);            getSumRec(root.left,sum-root.left.val,item,list);            item.remove(item.size()-1);              //切换到另一条路径        }        if(root.right!=null){            item.add(root.right.val);            getSumRec(root.right,sum-root.right.val,item,list);            item.remove(item.size()-1);        }    }}


---EOF---

0 0
原创粉丝点击