题目
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.
For example: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->2
which sum is 22.
翻译
给定二叉树和总和,确定树是否具有根到叶的路径,使得沿着路径的所有值相加等于给定的和。
分析
这道题类似于之前刷链表的一题,用sum减去每一次递归的root的值,然后进行递归即可
不过对于边界条件一开始没有判断清楚。
开始所想为
if(root==NULL&&sum>0) return false结果运行错误 出现了member access within null pointer of type 'struct TreeNode的错误(不太懂是什么意思)
事实上是这样
if(root==NULL) return false;
if(root->val==sum&&root->left==NULL&&root->right==NULL) return边界条件还是要事先想清楚
最后贴上代码
/** * 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->val == sum && root->left == NULL && root->right == NULL) return true; return hasPathSum(root->left,sum-root->val)||hasPathSum(root->right,sum-root->val); } };