问题:给定一颗二叉树和一个值,判断是否存在从根节点到叶子节点的路径和等于给定的值。
分析:题目并未说明该二叉树是二叉搜索树,所以认为是一个普通的二叉树。可以采用递归的方式解答,首先判断当前遍历节点的值与之前的遍历过节点的和是否等于给定的值,如果等于且左右孩子节点为null,则认为存在这样的一条路径,使得从根节点到叶子节点这条路径的和等于给定的值。如果不等于,则遍历左子树和右子树,如果其中一个遍历的结果相等,则返回true。
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
int sum_save=0;
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null)
return false;
sum_save+=root.val;
if(sum_save==sum&&root.left==null&&root.right==null)
return true;
if(sum-sum_save!=0){
return hasPathSum(root.left,sum_save)||hasPathSum(root.right,sum_save);
//hasPathSUm(root.right)
}
return false;
}
}