leetcode:Sum Root to Leaf Numbers

一、题目

给一个二叉树,其中节点只可能是数字0-9,,每一条路径组成一个数。

如下:

1

/ \

23

sum=12+13=25.

二、分析

想起了一句话,树的问题可归结为递归问题,这道题也一样,每次经过一个节点会遇到三中情况:

1、不包含左/右节点;

2、普通节点,即拥有有效的左或右节点;

3、无效节点(NULL);

而这三种情况对应于递归实现中的三种不同的实现方式:

1、sum*10+root->val;

2、helper(root->left,sum*10+root-val)+helper(root->right,sum*10+root-val);

3、return0

代码:

/** * Definition for binary tree * struct TreeNode { *int val; *TreeNode *left; *TreeNode *right; *TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:int helper(TreeNode *root, int sum){if(root == NULL)return 0;if(root->left == NULL && root->right == NULL){return (sum * 10 + root->val);}else {return helper(root->left, sum * 10 + root->val) + helper(root->right, sum * 10 + root->val);}}int sumNumbers(TreeNode *root) {return helper(root, 0);}};

如下:

/** * Definition for binary tree * struct TreeNode { *int val; *TreeNode *left; *TreeNode *right; *TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:void helper(TreeNode *root, int &sum, int c_sum){if(root == NULL)return ;c_sum = c_sum * 10 + root->val;helper(root->left, sum, c_sum);helper(root->right, sum, c_sum);if(root->left == NULL && root->right == NULL)sum += c_sum;}int sumNumbers(TreeNode *root) {int sum = 0;helper(root, sum, 0);return sum;}};

曾经拥有的不要忘记,难以得到的更要珍惜,

leetcode:Sum Root to Leaf Numbers

相关文章:

你感兴趣的文章:

标签云: