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;ival; //记录 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