public List<List<Integer>> pathSum(TreeNode root, int sum) {
		
		if(root==null) return new ArrayList<List<Integer>>();
		if(isLeaf(root) && root.val!=sum)return new ArrayList<List<Integer>>();
		
		List<List<Integer>> rtPathSet =new ArrayList<List<Integer>>();
		
		if(isLeaf(root) && root.val == sum)
		{
			List<Integer> rtPath =new ArrayList<Integer>();
			rtPath.add(root.val);
			rtPathSet.add(rtPath);
			return rtPathSet;
		}
		
		List<List<Integer>> lS;
		lS =  pathSum(root.left, sum-root.val);
		if(lS.size()>0)
		{
			for(List<Integer> l:lS)
			{
				l.add(0, root.val);
				rtPathSet.add(l);
			}
		}
		List<List<Integer>> rS=pathSum(root.right, sum-root.val);
		if(rS.size()>0)
		{
			for(List<Integer>l:rS)
			{
				l.add(0,root.val);
				rtPathSet.add(l);
			}
		}
		return rtPathSet;
		
		
	        
    }