题目描述:
标签:树 深度优先搜索
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
叶子节点 是指没有子节点的节点。
代码:
思路分析:
1、递归参数:根节点,当前count,初始化为targetSum
2、递归结束条件,叶子结点且count==0(满足和要求),返回true,仅仅叶子结点(不满足和要求),返回false
3、递归左子树(非空),count-左子树.val ,如果递归函数满足条件,返回true
4、递归右子树(非空),count-右子树.val,如果递归函数满足条件,返回true
5、全都不满足,说明不存在这样的路径,返回false
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root == null) return false;
return traversal(root,targetSum - root.val);
}
public boolean traversal(TreeNode root,int count){
if(root.left == null && root.right == null && count == 0){
return true;//说明找到了满足条件的路径
}
if(root.left == null && root.right == null){
return false;//说明找到叶子结点但不满足和的要求
}
if(root.left != null){
count -= root.left.val;
if(traversal(root.left,count)) return true;
count += root.left.val;
}
if(root.right != null){
count -= root.right.val;
if(traversal(root.right,count)) return true;
count += root.right.val;
}
return false;
}
}