Path Sum问题及解法
2017-03-21 15:46
162 查看
问题描述:
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
示例:
Given the below binary tree and
return true, as there exist a root-to-leaf path
sum is 22.
问题分析:
求某一路径上的和是否为给定的数。只需要每次遍历到根节点就计算出当前剩余值是否根结点的值相等即可,主要原理还是利用深度优先遍历。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL) return false;
if(root->left == NULL && root->right == NULL && sum == root->val) return true;// 判断是否为叶子节点
return hasPathSum(root->left,sum - root->val) || hasPathSum(root->right,sum - root->val);
}
};
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
示例:
Given the below binary tree and
sum = 22,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
return true, as there exist a root-to-leaf path
5->4->11->2which
sum is 22.
问题分析:
求某一路径上的和是否为给定的数。只需要每次遍历到根节点就计算出当前剩余值是否根结点的值相等即可,主要原理还是利用深度优先遍历。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL) return false;
if(root->left == NULL && root->right == NULL && sum == root->val) return true;// 判断是否为叶子节点
return hasPathSum(root->left,sum - root->val) || hasPathSum(root->right,sum - root->val);
}
};
相关文章推荐
- 背包问题的遗传算法解法
- 称球问题的一般解法
- Hanoi(汉诺)问题的非递归解法
- 中国剩余定理:一类初数题的通用解法(除数,余数问题)(转载)
- 微软过桥问题的图论解法
- 高效的八皇后问题非递归解法
- JAVA中文问题及最优解法
- "100 个台阶"问题的 4 种解法
- 背包问题 顺推解法
- 那道据说“爱因斯坦都无法解答的问题”详细解法
- 皇后问题的一个解法
- 寻找必败态——一类博弈问题的快速解法
- 过河问题的图论解法
- 约瑟夫环问题单循环链表解法
- 大力的先入先出的库存物品,按批次出货的问题的一个解法。
- 字符串、汉字的拆分问题的解法
- 对求解“皇后排列问题”的一个新解法!
- 称球问题的测试解法
- 洗牌问题(多种解法以高效解法)
- 微软过桥问题的图论解法