private void pathSum_sub (TreeNode node, int sum, List<List<Integer>> ret, List<Integer> tmp)
    {
    	if (node == null)
    		return;
    	if (node.left == null && node.right == null)
    	{
    		if (node.val == sum)
    		{
    			tmp.add(node.val);
    			ret.add(new ArrayList<Integer>(tmp));
    			tmp.remove(tmp.size()-1);
    		}
    		return;
    	}
    	else
    	{
			if (node.left != null)
			{
				tmp.add(node.val);
				pathSum_sub(node.left, sum-node.val, ret, tmp);
    			tmp.remove(tmp.size()-1);
			}
    		
			if (node.right != null)
			{
				tmp.add(node.val);
				pathSum_sub(node.right, sum-node.val, ret, tmp);
    			tmp.remove(tmp.size()-1);
			}
    		return;
    	}
    }