112. Path Sum
Total Accepted: 101647 Total Submissions: 324557 Difficulty: EasyGiven 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.
【分析】
此题比较简单,采用深度遍历的思路很容易解决,我解此题采用的是“中序遍历”,每搜索一个结点,首先判断其是否为叶子结点,如果是则判断路径和与给定值是否相等;若为非叶子结点,则继续搜索。
【基于DFS思想的C++语言解法】
/**
* 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)
{
bool result=false;
DFS(root,result,0,sum);
return result;
}
void DFS(TreeNode* root, bool &result, int currentSum,int sum)
{
if(root==NULL)return;
if(root->left==NULL&&root->right==NULL&¤tSum+root->val==sum)//搜索到达叶子结点
{
result=true;
return;
}
else
{
DFS(root->left, result, currentSum+root->val, sum);//中序遍历
DFS(root->right, result, currentSum+root->val, sum);
}
}
};
【基于DFS思想的Java语言解法】
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
boolean result;
public boolean hasPathSum(TreeNode root, int sum)
{
result=false;
DFS(root,0,sum);
return result;
}
public void DFS(TreeNode root, int currentSum,int sum)
{
if(root==null||result==true)return;
if(root.left==null&&root.right==null&¤tSum+root.val==sum)//搜索到达叶子结点
{
result=true;
return;
}
else
{
DFS(root.left, currentSum+root.val, sum);
DFS(root.right, currentSum+root.val, sum);
}
}
}