JAVA 프로그래밍: 경로 총 II(LeetCode: 113)

1188 단어
두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.
예: 다음과 같은 두 갈래 트리와 목표와sum=22,
5/\4 8//\11 134/\/\7 2 5 1 반환:
[    [5,4,11,2],    [5,8,4,5] ]
사고방식: dfs만 하면 돼.
class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
	 TreeNode(int x) { val = x; }
}

class Solution {
    public List> pathSum(TreeNode root, int sum) {
        
    	List res=new ArrayList();
    	List> ans=new ArrayList>();
    	
    	if(root==null)
    		return ans;
    	
    	dfs(ans,res,root,sum,0);
    	
    	return ans;
    }
    
    private void dfs(List> ans,List res,TreeNode root,int targetsum,int sum)
    {
    	res.add(root.val);
    	if(root.left==null && root.right==null)
    	{
    		if(targetsum==sum+root.val)
    			ans.add(new ArrayList(res));
    	}
    	if(root.left!=null)
    		dfs(ans,res,root.left,targetsum,sum+root.val);
    	if(root.right!=null)
    		dfs(ans,res,root.right,targetsum,sum+root.val);
    	res.remove(res.size()-1);
    }
}

좋은 웹페이지 즐겨찾기