Path Sum II

来源:互联网 发布:sql统计总金额 编辑:程序博客网 时间:2024/05/21 14:58

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 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;}



其实,结果不重要,思想很重要。

原创粉丝点击