void dfs(int** ret,struct TreeNode *now,int sum){
int i;
if(now->val > sum) return; //题目说了全是正数 因此可以剪枝 当本节点值已经大于目标值时
else if(now->left == NULL && now->right==NULL && now->val == sum){ //叶结点且正好符号
ret[row][col++]=now->val;
len[row++]=col; //记录本行节点数
for(i=0;i
val; //记录
if(now->left!=NULL) dfs(ret,now->left,sum-now->val); //左右递归
if(now->right!=NULL) dfs(ret,now->right,sum-now->val);
col--; //回退
int** findPath(struct TreeNode* root, int sum, int** columnSizes, int* returnSize) {
int i;
int **ret=(int**)malloc(sizeof(int*)*1000); //申请矩阵
for(i=0;i<1000;i++) ret[i]=(int*)malloc(sizeof(int)*1000);
**columnSizes=0; //初始化为空
*returnSize=0;
if(root==NULL) return ret; //空就返回
dfs(ret,root,sum); //递归深搜
*returnSize=row; //更新行列数
for(i=0;i