当前位置:编程学习 > JAVA >>

[LeetCode]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]
]
Discuss
 
java code : 
 
/** 
 * Definition for binary tree 
 * public class TreeNode { 
 *     int val; 
 *     TreeNode left; 
 *     TreeNode right; 
 *     TreeNode(int x) { val = x; } 
 * } 
 */  
public class Solution {  
    public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {  
        // IMPORTANT: Please reset any member data you declared, as  
        // the same Solution instance will be reused for each test case.  
        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();  
        if(root == null)  
            return res;  
        ArrayList<Integer> tmp = new ArrayList<Integer>();  
        recursion(root, res, tmp, sum);  
        tmp = null;  
        return res;  
    }  
    public void recursion(TreeNode root, ArrayList<ArrayList<Integer>> res, ArrayList<Integer> tmp, int sum)  
    {  
        if(root.left == null && root.right == null)  
        {  
            tmp.add(root.val);  
            int sum1 = 0;  
            for(int i = 0; i < tmp.size(); i++)  
            {  
                sum1 += tmp.get(i);  
            }  
            if(sum1 == sum)  
                res.add(new ArrayList<Integer>(tmp));  
            return ;  
        }  
        tmp.add(root.val);  
        if(root.left != null)  
        {     
            recursion(root.left, res, tmp, sum);  
            tmp.remove(tmp.size() - 1);  
        }  
        if(root.right != null)  
        {  
            recursion(root.right, res, tmp, sum);  
            tmp.remove(tmp.size() - 1);  
        }  
    }  
}  

 

 
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,