题目: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
思路:递归调用+深搜
先是判断顶端是否为空,接着判断两个孩子是否为空,为空,加之前的数字,返回true或者false。
如果不为空,说明有左边和右边,先是判断左边,再是判断右边,不管顺序,总之是会返回的。
以其中一个为例,继续递归调用,看是否为真,为真,返回真,绝对不能直接返回 (用相等的判断语句)。因为不知道另外一半的情况,不能轻易下结论。
代码:
/** * 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: //https://leetcode.com/problems/path-sum/ bool hasPathSum(TreeNode* root, int sum) { if(root==NULL){//主要是为了判断顶点 return false; } if(root->left==NULL&&root->right==NULL){ return root->val==sum; } //这边相当于经历了第一层 //开始经历第二层 if(root->left){ root->left->val+=root->val; //这个时候递归调用这个函数 if(hasPathSum(root->left,sum)){ return true; }//不能写 return hasPathSum(root->left, sum) 的原因是,我左边不能通过,右边可能存在呢。 //有更好,没有算了 } if(root->right){ root->right->val+=root->val; if(hasPathSum(root->right,sum)){ return true; } } return false;//无论上面怎么调用,都没用,返回false } };