题目

类型:DFS

难度:简单

路径总和 - 图1

解题思路

假定从根节点到当前节点的值之和为 val,可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为 sum - val。

若当前节点就是叶子节点,那么直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需要判断该路径和是否满足条件)。

若当前节点不是叶子节点,只需要递归地询问它的子节点是否能满足条件即可。

代码

  1. class Solution {
  2. public boolean hasPathSum(TreeNode root, int sum) {
  3. if (root == null) {
  4. return false;
  5. }
  6. if (root.left == null && root.right == null) {
  7. return sum == root.val;
  8. }
  9. return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
  10. }
  11. }