首页 > 代码库 > Path Sum II

Path Sum II

Path Sum II 

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]]

这道题不是自己A出来的,看了discuss区里面的,不过写的的确漂亮
 1 package com.gxf.test; 2  3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.Stack; 6  7  8  9    class TreeNode {10       int val;11       TreeNode left;12       TreeNode right;13       TreeNode(int x) { val = x; }14   }15 16    public class Solution {17         public List<List<Integer>> pathSum(TreeNode root, int sum) {18             List<List<Integer>> result = new ArrayList<List<Integer>>();19             if(null == root)20                 return result;21             if(null == root.left && null == root.right){                    //叶子结点22                 if(root.val == sum){23                     List<Integer> element = new ArrayList<Integer>();24                     element.add(sum);25                     result.add(element);26                 }27             }else{28                 result = pathSum(root.left, sum - root.val);                //获取左子树所有的路径29                 List<List<Integer>> result_right = pathSum(root.right, sum - root.val);//获取右子树所有路径30                 result.addAll(result_right);31                 32                 for(List<Integer> element : result){33                     element.add(0, root.val);                                //将根节点添加到第一个位置34                 }35             }36             37             return result;38         }39     }

 另一种DFS

 1 package com.gxf.test; 2  3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.Stack; 6  7  8  9    class TreeNode {10       int val;11       TreeNode left;12       TreeNode right;13       TreeNode(int x) { val = x; }14   }15 16    public class Solution {17         public List<List<Integer>> pathSum(TreeNode root, int sum) {18             List<List<Integer>> result = new ArrayList<List<Integer>>();19             List<Integer> currentElement = new ArrayList<Integer>();20             21             getPath(root, sum, result, currentElement);22             23             return result;24         }25         26         /**27          * 递归获取result28          * @param root29          * @param sum30          * @param reuslt31          * @param currentResult32          */33         public void getPath(TreeNode root, int sum, List<List<Integer>> result, List<Integer> currentResult){34             if(null == root)35                 return;36             currentResult.add(root.val);                                //添加到currentResult37             if(null == root.left && null == root.right){                //叶子结点38                 if(sum == root.val){39                     result.add(new ArrayList<Integer>(currentResult));                            //添加到result中40                 }41                 currentResult.remove(currentResult.size() - 1);            //移除叶子结点42                 return ;43             }44             else{                                                        //非叶子结点45                 getPath(root.left, sum - root.val, result, currentResult);    //遍历左子树46                 getPath(root.right, sum - root.val, result, currentResult);             //遍历右子树47                 48             }49             50             currentResult.remove(currentResult.size() - 1);                //递归回退时,没有这个只会删除叶子结点51         }52     }

 



Path Sum II