码迷,mamicode.com
首页 > 其他好文 > 详细

Path Sum II

时间:2014-12-11 20:36:17      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   java   on   

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          * 递归获取result
28          * @param root
29          * @param sum
30          * @param reuslt
31          * @param currentResult
32          */
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);                                //添加到currentResult
37             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

标签:style   blog   io   ar   color   sp   for   java   on   

原文地址:http://www.cnblogs.com/luckygxf/p/4158325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!