1.路径总和
【题目】
【分析】
1.递归
bool hasPathSum(struct TreeNode *root, int sum) {
if (root == NULL) {
return false;
}
if (root->left == NULL && root->right == NULL) {
return sum == root->val;
}
return hasPathSum(root->left, sum - root->val) ||
hasPathSum(root->right, sum - root->val);
}
2.dfs+递归
--递归1--
bool dfs(struct TreeNode* root,int totalSum, int targetSum)
{
if(root == NULL)
{
return false;
}
totalSum += root->val;
if(root->left == NULL&& root->right == NULL && totalSum == targetSum)
{
return true;
}
if(root->left != NULL)
{
if(dfs(root->left,totalSum,targetSum))
{
return true;
}
}
if(root->right != NULL)
{
if(dfs(root->right,totalSum,targetSum))
{
return true;
}
}
return false;
}
bool hasPathSum(struct TreeNode* root, int targetSum)
{
return dfs(root,0,targetSum);
}
--递归2--
bool isLeef(struct TreeNode* root) {
if(root == NULL) return false;
if (root->right == NULL && root->left == NULL) return true;
return false;
}
bool hasPathSum(struct TreeNode* root, int targetSum){
if (root == NULL) return false;
int temp = targetSum - root->val;
if (isLeef(root)) {
if (temp != 0) return false;
return true;
}
return hasPathSum(root->right, temp) + hasPathSum(root->left, temp);
}