Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:
Given the below binary tree and
Given the below binary tree and
sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *columnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
// record the
// 数组长度
#define LENGTH 1000
// 用来记录输出结果
int arr[LENGTH][LENGTH];
//用来记录 每个路径上的长度
int len[LENGTH];
// 用来记录 符合条件的轮径数
int count = 0;
// 临时变量,记录 路径 栈
int stack[LENGTH];
// 记录路劲遍历过长中的长度
int length = 0;
void sub_sum(struct TreeNode *node, int sum) {
if (!node) {
return;
}
//将访问到的节点装入栈中
stack[length] = node->val;
++length;
int sub_left = sum - node->val;
// if it's leaf node, check wheather the left is 0
if (node->left == NULL && node->right == NULL) {
if (sub_left == 0) {
// copy the stack into array
int i;
for (i = 0; i < length; ++i) {
arr[count][i] = stack[i];
}
len[count] = length;
++count;
}
} else {
if (node->left != NULL) {
sub_sum(node->left, sub_left);
}
if (node->right != NULL) {
sub_sum(node->right, sub_left);
}
}
// 回退
--length;
}