问:二叉树是否存在路径和等于sum的路径,若存在输出true,否则输出false
分析:递归调用二叉树,每次将上一层的val值传递给子结点并加上子节点的val,当传递到某个结点为叶子结点时,判断其val值是否等于sum
错点:二叉树为空,则无论sum为多少都为false,这个容易造成RE
二叉树只有根节点,则直接判断其值与sum的关系
class Solution { public: void PathSum(TreeNode *root,int val,int sum,int &flag) { root->val+=val; if(root->left==NULL && root->right==NULL && sum==root->val) { flag=1; } if(root->left) PathSum(root->left,root->val,sum,flag); if(root->right) PathSum(root->right,root->val,sum,flag); } bool hasPathSum(TreeNode *root, int sum) { if(root==NULL) { return false; } if(root->left==NULL && root->right==NULL) { if(root->val==sum) return true; return false; } int flag=0; if(root->left) PathSum(root->left,root->val,sum,flag); if(root->right) PathSum(root->right,root->val,sum,flag); if(flag) return true; return false; } };
class Solution { public: bool PathSum(TreeNode *root,int sum,int val) { if(root==NULL) return false; val+=root->val; if(root->left==NULL && root->right==NULL) { if(sum==val) return true; return false; } return PathSum(root->left,sum,val) || PathSum(root->right,sum,val); } bool hasPathSum(TreeNode *root, int sum) { return PathSum(root,sum,0); } };